原题链接:出圈
解题思路:
按照题目踢出方法,先把没有踢出的人全部置1,若有人踢出把他置0;
注意事项:
最后一个人i的值必须等于-1,i最后还会+1,再一次循环就从牌p[0]开始;
参考代码:
#include <stdio.h> #include<malloc.h> int number(int n,int m); int main(void) { int n,m; while((scanf("%d%d",&n,&m))!=EOF) { number(n,m); } return 0; } int number (int n,int m) { int *p;//创建指针p int i=0,j=0,k=0; p=(int *)malloc(sizeof(int )*n);//堆区开辟n个int型空间 if(p!=NULL)//检测内存是否申请成功 { for(i=0;i<n;i++)//把所以人的打上编号,没有提出的人都置一 { p[i]=1; } for(i=0;i<n;i++) { if(p[i]!=0)//判断是否被踢出 { j++; if(j==m)//j记录数的数字,数到m就置0 { j=0;//每一次都清0 p[i]=0;//数到m就提出的人; k++;//记录提出人的数量 } } if(i==n-1)//n-1位就是数组的最后一位 { i=-1;//最后i++ } else if(k==n-1)//n-1是剩下最后一个人 { break; } } for(i=0;i<n;i++)//循环检测出最后一个人的编号 { if(p[i]==1) { printf("%d\n",i+1);//第一位是0;所以加1 } } free(p);//释放内存p } else printf("NO malloc"); return 0; }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复