右侧附件囊肿怎么治疗:猴子选大王问题,请高手帮忙~

来源:百度文库 编辑:神马品牌网 时间:2024/04/29 18:16:19
n只猴子,从1到n报数,数到m的猴子跳出,剩下的猴子如此往复地报数,剩下的那只猴子为大王。
请用c++(注意是c++,不是c)给出编译代码,或仔细讲明原理。
谢谢!
中华风筝的这个答案我查到过,运行的结果不对,程序的语言也有问题。

说明看注释,注意数组初始化了100个,可以自己调

#include<iostream.h>

int choose(int num,int del)
{
int i;
int a[100];
for(i=0;i<num;i++)
a[i]=1; //猴子状态初始化,为1表示可能被选上,为0表明没希望了;

int sum=0, //循环记数;
countOne=num; //累积记数初始化,大于1表明还有大王候选人;

while(countOne>1)
{
countOne=0;
for(i=0;i<num;i++)
{
sum+=a[i];
if(sum==del)
sum=a[i]=0; //淘汰倒霉猴子;
countOne+=a[i];
}
}

for(i=0;i<num;i++)
if(a[i]!=0)
return i; //找到幸运猴子编号(从0开始的);
}

void main()
{
int num,del;
cout<<"请输入猴子总数和淘汰数:";
cin>>num>>del;
cout<<"第"<<choose(num,del)+1<<"个猴子为王!"<<endl;
}