解题思路和注意事项:
本题我的思路是用数组来做,初始值为1,当其退出的时候将其置为0,下面讲解:
1、首先定义一个数组,将值都置为1;
2、开始循环,因为要到只剩一个人为止,则该循环在最后退出人数为n-1的时候结束;
3、首先判断a[i]是否等于0,是0则判断是否是数组最后一个数,如果是就需要从头再开始循环,所以如代码所示。不是0则计数加1,即报数;
4、当报数为3时退出一个数,即置为0;
5、当循环到最后一个数时,置i=-1,因为要i++;
6、当退出数量k=n-1时,结束循环。
参考代码:
#include<stdio.h> int main() { int a[1000],n,i,count,k = 0; scanf("%d",&n); for(i=0; i<n; i++) a[i] = 1; i = 0; count = 0; while(1){ if(a[i] == 0){ if(i == n-1) i = -1; i++; continue; //结束本次循环,开始下次循环 } else count++; //报数加1,注意这里初始值为0 if(count == 3){ a[i] = 0; k++; //k表示退出人数,当count=3时,加1 count = 0; //重新开始新一轮报数 } if(k == n-1) //当退出人数为n-1时,结束整个循环 break; if(i == n-1) //当报数到最后一人时,从第一人开始再来一次循环 i = -1; i++; } for(i=0; i<n; i++){ if(a[i] == 1){ //输出最后剩下的一人的位置,i+1 printf("%d\n",i+1); break; } } return 0; }
0.0分
0 人评分
C语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:626 |
化学品问题 (C语言代码)浏览:1328 |
点我有惊喜!你懂得!浏览:1322 |
C语言程序设计教程(第三版)课后习题12.6 (C语言代码)浏览:789 |
C语言考试练习题_保留字母 (C语言代码)浏览:561 |
求组合数 (C语言代码)浏览:1152 |
WU-图形输出 (C++代码)浏览:800 |
1011题解浏览:760 |
1013题解浏览:552 |
妹子杀手的故事 (C语言代码)浏览:1045 |