close

/*
 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;
}


執行結果:

Jose.jpg 

規則說明:

一群士兵被敵軍包圍,
希望得到外界支援,
但是軍中只剩一匹馬只可供一個士兵使用,
必須選出此人選

選擇方法:
將士兵圍成一圈
隨意定一個正整數m
由1號士兵為起始點
順時鐘計算
被點到的士兵就退出
直到最後一位

arrow
arrow
    全站熱搜

    flyinsky76 發表在 痞客邦 留言(0) 人氣()