⑴ 猴子選大王
有M只猴子圍成一圈,每隻各一個從1到M中的編號,打算從中選出一個大王;經過協商,決定出選大王的規則:從第一個開始循環報數,數到N的猴子出圈,最後剩下來的就是大王。要求:從鍵盤輸入M、N,編程計算哪一個編號的猴子成為大王
#i nclude<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;
}