原题链接:[编程入门]报数问题
解题思路:定义一个足够大的数组来存放人员的编号,定义一个变量来延续数组后面的编号!比如:n=3,则数组为{1,2,3};数组足够大的情况下,判断下标+1%3是否等于0;是就把这个下标的元素置0。表达能力不太好。具体的看代码把。标注的挺清楚的。
注意事项:循环的退出条件用一个计数器来作为跳出条件,看代码把。
参考代码:
#include<stdio.h> #include<stdlib.h> int main() { int i,k=0,l,n; //i作为循环条件,k作为计数器,l作为n结尾的开头 int *p; scanf("%d",&n); p=(int*)malloc(sizeof(int)*n*8);//定义一个可变化的指针大小 for(i=0; i<n*(n/2); i++) { //给每一个元素的相应位置赋值对应的人员编号 p[i]=i+1; } l=n; //让l的初始值等于数组的最后那个数的下一个 for(i=0; k<n-1; i++) { //退出条件是n-1个元素置0后退出 if((i+1)%3==0) { //取余,余数为0的就是数到3的那个人 p[i]=0; //数字是3的人给他这个数组元素清0 k++; //计数器k+1 } else if(p[i]!=0) { //判断这个数组元素是否为0 p[l]=p[i]; //数组不为0的元素将他放到数组n的后面作为延续 l++; } } printf("%d",p[l-1]); //直接输出第l-1个元素就是剩下的最后的那个人的编号了 return 0; }
0.0分
11 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复