原题链接:出圈
解题思路:
按照题目踢出方法,先把没有踢出的人全部置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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复