题目描述
n个人(n<=100)围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再出圈,……依次类推,直到所有的人都出圈,请输出依次出圈人的编号.
输入格式:
n m
输出格式:
出圈的编号
说明
m,n≤100
数据较小,直接模拟了,应该可以直接用数学推(不确定),推出第几个出局的是第几个人。
#include<cstdio>
using namespace std;
int main() {
int n,m,s=0;
scanf("%d%d",&n,&m);
bool visit[200]= {0};
for(int k=0; k<n; k++) {
for(int i=0; i<m; i++) {
if(++s>n)s=1; //模拟环状结构
if(visit[s])i--; //跳过出局的人
}
printf("%d ",s); //出局
visit[s]=true;
}
return 0;
}