题目描述
�n 个人围成一圈,从第一个人开始报数,数到 �m 的人出列,再由下一个人重新从 11 开始报数,数到 �m 的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。
注意:本题和《深入浅出-基础篇》上例题的表述稍有不同。书上表述是给出淘汰 �−1n−1 名小朋友,而该题是全部出圈。
输入格式
输入两个整数 �,�n,m。
输出格式
输出一行 �n 个整数,按顺序输出每个出圈人的编号。
输入输出样例
输入 #1复制
10 3
输出 #1复制
3 6 9 2 7 1 8 5 10 4
我的想法
我觉得很难 但我还是做了。。。。。。
#include<bits/stdc++.h>
using namespace std;
bool st[101];
int main(){
int n,m;
int a[101];
cin >> n >> m;
int j = 0;
for(int i = 1; i <= n ; i++) a[i] = i; //第i个数字存储在a[i]中
int k = 0;
int i = 1;
int flag = 0;
while(1)
{ if(!st[i]) //该数字没有出队
{ ++k;
if(k == m) // 第m个出队
{ cout << a[i] << ' ';
st[i] = true; // 标记该点已经出去了
flag ++; // 总共出去了flag个
k = 0;
}
}
if(flag == n) break; //数字出去完了 退出循环
++i;
if(i > n) i = 1; //下标越界 i重置为1 从头开始找
}
return 0;
}
//姬霓太美