有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

输入描述:
一行,一个正整数n(1<=n<=1000000)。

输出描述:
输出答案。

输入例子1:
5

输出例子1:
4

例子说明1:
出局的编号依次为3,1,5,2,最后留下的是4

//使用数组 看到100w别怕数组照样可以创建,剩下的就是模拟过程 
#include <bits/stdc++.h>
using namespace std;
int num[1000000+5];
int main(){
	int n;
	scanf("%d",&n);
	int cnt=n;//目前未出局人数
	int flag=0;//报数 
	for(int i = 1;;i++){
		if(i==n+1){//超过人数从1开始 
			i=1;
		} 
		if(num[i]==0){//局中人报数+1 
			flag++;
		}else{//跳过 
			continue;
		} 
		if(flag%3==0){//标记 
			cnt--;
			num[i]=1;
		}
		if(cnt==1) break;//只有一个人就退出报数游戏 
		
	}
	for(int i=1;i<=n;i++){
		if(num[i]==0){
			printf("%d",i);
			break;	
		}
	}
	return 0;
} 
posted @ 2020-09-21 22:41  DJ同学  阅读(368)  评论(0编辑  收藏  举报