题目描述 n只猴子围坐成一个圈,按顺时针方向从1到n编号。然后从1号猴子开始沿顺时针方向从1开始报数,报到m的猴子出局,再从刚出局猴子的下一个位置重新开始报数,如此重复,直至剩下一个猴子,它就是大王。 输入 输入两个整数n和m,1<=m<=n<=100。 输出 输出猴王的编号 样例输入 复制 8 3 样例输出 复制 7
1 #include<stdio.h> 2 #include<string.h> 3 #include<iostream> 4 #include<algorithm> 5 using namespace std; 6 #define N 200 7 struct monkey{ 8 int xu;//猴子的序号 9 int biao;//标记猴子是否出局 10 }monk[N]; 11 int main() 12 { 13 int n,m,i,j,k,flag,t,sum; 14 while(scanf("%d %d",&n,&m)!=EOF) 15 { 16 for(i=1;i<=n;i++) 17 { 18 monk[i].xu=i; 19 monk[i].biao=0; 20 }//初始化 21 flag=0; 22 k=0; 23 while(flag!=1)//当只剩下一只猴子没有出局时跳出 24 { 25 for(i=1;i<=n;i++) 26 { 27 /*sum=0; 28 for(j=1;j<=n;j++) 29 { 30 if(!monk[j].biao) 31 { 32 sum++; 33 t=j; 34 } 35 } 36 if(sum==1) 37 break;*/ //把这部分删掉的话 当m=1时,没有结果,但可以提交正确(后台数据--2333) 38 //审题需要考虑特殊情况,最好加上 39 if(!monk[i].biao)//如果该猴子没有出局 40 { 41 k++; 42 if(k==m) 43 { 44 monk[i].biao=1; 45 k=0;//重新开始报数 46 } 47 } 48 } 49 sum=0;// 统计还有几只猴子没有出局 50 for(i=1;i<=n;i++) 51 { 52 if(!monk[i].biao) 53 { 54 sum++; 55 t=i;// 最后更新为最后一只没有出局的猴子 56 } 57 } 58 if(sum==1) 59 flag=1;//跳出循环 60 } 61 printf("%d\n",t); 62 } 63 return 0; 64 }
浙公网安备 33010602011771号