/*
Josephus Problem
*/
#include<iostream>
#include<ctime>
using namespace std;
#define size 5
struct Node
{
int value;
Node *next;
};
int main()
{
srand(time(0));
int num;
Node *queue,*people,*ptr;
queue = new Node;
people = queue;
num = rand()%size+1;
cout<<"士兵順序: "<<endl;
for(int i=1;i<=size;i++)
{
people->value = i;
cout<<people->value<<" ";
if( i == size )
people->next = queue;
else
{
people->next = new Node;
people = people->next;
}
}
cout<<endl<<endl;
cout<<"隨機數字: "<<num<<endl<<endl;
ptr = queue;
for(int j = 1;j<size;j++)
{
cout<<"第"<<j<<"回 淘汰編號 ";
for(int k = 1;k<num-1;k++)
ptr = ptr->next;
cout<<ptr->next->value<<" 士兵"<<endl<<endl;
ptr ->next = ptr->next->next;
ptr = ptr->next;
}
cout<<endl<<endl<<"最後勝利者 編號 "<<ptr->value<<" 士兵"<<endl<<endl;
return 0;
}
執行結果:
規則說明:
一群士兵被敵軍包圍,
希望得到外界支援,
但是軍中只剩一匹馬只可供一個士兵使用,
必須選出此人選
選擇方法:
將士兵圍成一圈
隨意定一個正整數m
由1號士兵為起始點
順時鐘計算
被點到的士兵就退出
直到最後一位
留言列表