原题链接:[编程入门]报数问题
解题思路和注意事项:
本题我的思路是用数组来做,初始值为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语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复