题目描述
有 N 个人绕成圆圈,按照顺序排号 (1
-N) ,第一个人从 1
开始依次报数,报到 3
的人淘汰,接下来的人又从 1
开始依次报数,报到 3
的人淘汰;再报数,直到只剩下一个人,问最后留下的是原来第几号的那个人。
输入格式
一个 ≥1
的整数,代表总共有多少人。
输出格式
一个整数,代表最后剩下的人是几号。
输入输出样例
输入格式 10
输出格式 4
说明/提示
排号从 1
开始。
#include <bits/stdc++.h>
using namespace std;
struct man{
int flag;
int drop;
};
man m[10086];
int main()
{
int n;
cin>>n;
if(n==1) cout<<"1";//特殊情况
else{
for(int i=1;i<=n;i++){
m[i].flag=i;//记录原始编号
m[i].drop=0;//.drop==0表示没被淘汰
}
int cntdrop=0;//计算有几个淘汰的
int k=1;//标记游戏是否该结束--控制while循环
int cnt=0;//计数器--报数
while(k){
for(int i=1;i<=n;i++){
if(m[i].drop==0){
cnt++;
if(cnt==3){
m[i].drop=1;//标记淘汰
cntdrop++;
if(cntdrop==n-1) k=0;//淘汰到只剩一个 结束游戏
cnt=0;//重新报数
}
}
}
}
for(int i=1;i<=n;i++){
if(m[i].drop==0)cout<<m[i].flag;
}
}
}
做好记录 按要求模拟即可 没有难点