有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;
}