解题思路:  用数组保存最开始位置。如果出圈,则赋值为0。反复计数,一直到出圈人数到n-1即可。

最后看看谁不是0,就是最后留下的。

注意事项:从a[1]开始保存位置。a[0]保存第n个位置,可以让循环更好进行。

参考代码:

#include <stdio.h>
#define N 100
int main()
{
	int a[N]={0};
	int i,n,k=0,m=0;
	scanf("%d",&n);
	a[0]=n;    //数组第0个存放第n位置,从第1个开始数 
	for(i=1;i<n;i++) 
		a[i]=i;  //存放位置,a[1]就是存放1,a[2]存放2等等 
	for(i=1;m<n-1;i++) //做n-1次即可,m统计出圈次数 
	{
		if(a[i%n]==0) //等于0,表示已经出圈 
			continue;
		k++;
		if(k==3)  //计数到3,则对应的出圈 
		{
			a[i%n]=0;  //出圈 
			m++;       //出圈加1 
			k=0;  
		}
	}
	for(i=0;i<n;i++)  //看看最后留下的是原来的第几号 
	{
		if(a[i]!=0)
			printf("%d",a[i]);
	}
	return 0;
}


点赞(1)
 

0.0分

63 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 16 条评论

山茶 2年前 回复TA
小白的最有价值之物!
zhangzy 2年前 回复TA
妙蛙种子妙啊
苏一 2年前 回复TA
如果n是4,那为什么最后赢得是1,不应该是2吗
菜就多刷题 3年前 回复TA
写的真牛逼啊,理解一下,受益匪浅啊!!!
不拿省一不罢休 3年前 回复TA
牛逼,膜拜大佬
silencess 3年前 回复TA
k==3改成k%3==0,可把k=0删掉
isMENGYU呐 3年前 回复TA
您好,我想问一下为什么第二个for循环不从i= 0开始,最后一个数n可以循环到吗?
猛男你好 3年前 回复TA
真的太漂亮了这个代码!
五仁月饼 3年前 回复TA
对于小白来说,堪称艺术品
22贵大考研 3年前 回复TA
牛逼