湖畔读书人


私信TA

用户名:2814787590

访问量:121137

签 名:

等  级
排  名 22
经  验 18865
参赛次数 0
文章发表 42
年  龄 0
在职情况 学生
学  校 武汉东湖学院
专  业

  自我简介:

解题思路和注意事项:


本题我的思路是用数组来做,初始值为1,当其退出的时候将其置为0,下面讲解:

        1、首先定义一个数组,将值都置为1;

        2、开始循环,因为要到只剩一个人为止,则该循环在最后退出人数为n-1的时候结束;

        3、首先判断a[i]是否等于0,是0则判断是否是数组最后一个数,如果是就需要从头再开始循环,所以如代码所示。不是0则计数加1,即报数;

        4、当报数为3时退出一个数,即置为0;

        5、当循环到最后一个数时,置i=-1,因为要i++;

        6、当退出数量k=n-1时,结束循环。

参考代码:

#include<stdio.h>
int main()
{
	int a[1000],n,i,count,k = 0;
	scanf("%d",&n);
	for(i=0; i<n; i++)
		a[i] = 1;
	i = 0;
	count = 0;
	while(1){
		if(a[i] == 0){
			if(i == n-1)
				i = -1;
			i++;
			continue;            //结束本次循环,开始下次循环
		}
		else
			count++;             //报数加1,注意这里初始值为0
		if(count == 3){
			a[i] = 0;
			k++;                 //k表示退出人数,当count=3时,加1
			count = 0;           //重新开始新一轮报数
		}
		if(k == n-1)                 //当退出人数为n-1时,结束整个循环
			break;
		if(i == n-1)                 //当报数到最后一人时,从第一人开始再来一次循环
			i = -1;
		i++;
	}
	for(i=0; i<n; i++){
		if(a[i] == 1){               //输出最后剩下的一人的位置,i+1
			printf("%d\n",i+1);
			break;
		}
	}
	return 0;
}


 

0.0分

0 人评分

  评论区