num个小孩围绕坐在一起,分别标记为{1,2,3...,num},从某一个小孩开始计数,每隔interval个孩子便要离开一个,最后剩下的便是获胜者。
#include<iostream>
using namespace std;
int main()
{
int num,interval,startNum;
cout<<"please input the num of children 、 the interval and the start num"<<endl;
cin>>num>>interval>>startNum;
int* children=new int[num];
for(int i=0;i<num;i++)//为每个小孩进行标记
children[i]=i+1;
for(int i=0;i<num;i++)
cout<<children[i]<<',';
cout<<endl;
int index=startNum-2;//起始小孩的前一个小孩的数组下标,当第一个孩子是起始小孩时,index=-1
int round=1;//记录游戏的轮数
while(1)
{
for(int i=0;i<interval;)//数数环节
{
index=(index+1)%num;
if(children[index]!=0)//判断该孩子是否已经离开
i++;
}
if(round==num)//当轮数和小孩子的总数相同时,便只剩下一个小孩了
break;
cout<<children[index]<<',';//输出离开的小孩的标记
children[index]=0;//并且将该小孩的标记置0,表示已经离开
round++;//开始下一轮游戏
}
cout<<endl;
cout<<"NO "<<children[index]<<" child wins the game."<<endl;
delete[] children;
return 1;
}