Hzu挑战自我


私信TA

用户名:gxhzxyjsj

访问量:98798

签 名:

2024终究会过去,期待2025!

等  级
排  名 8
经  验 27863
参赛次数 67
文章发表 157
年  龄 0
在职情况 教师
学  校 贺州学院
专  业 软件工程

  自我简介:

弱鸡一个,继续努力!

解题思路:  用数组保存最开始位置。如果出圈,则赋值为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;
}


 

0.0分

77 人评分

  评论区

对于小白来说,堪称艺术品
2021-02-26 15:38:35
牛逼
2021-02-08 13:23:57
这个逻辑是真厉害
2021-01-23 10:36:44
厉害
2020-11-12 09:47:29
你好,请问i为什么从1开始?还有为什么a[i%n]?
2019-10-31 19:45:05