问题 D: C语言10.18

题目描述

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

输入

只有一个正整数 n,保证 n 不超过 1000。

输出

输出最后留下的人的原始编号。
请注意行尾输出换行。

样例输入

1
10

样例输出

1
4

提示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<iostream>
using namespace std;
int main(){
int n,m=0,i=1,k=0,j=0;
cin>>n;
int a[n];
for(i=0;i<n;i++)
a[i]=i+1;
while(m<n-1){
if(a[i]!=0) k++;
if(k==3) {
a[i]=0;
k=0;
m++;
}
i++;
if(i==n+1) i=1;
}
for(i=1;i<=n;i++)
if(a[i]!=0)
cout<<a[i]<<endl;
}