时间限制:C/C++ 1000MS,其他语言 2000MS
内存限制:C/C++ 64MB,其他语言 128MB
描述
传说约瑟夫当年活下来就是靠快速计算这个问题。
n个人围成一圈,编号依次为 1,2,3…n。从第一个人开始报数,数到 m的人出列,再由下一个人重新从1开始报数,数到m的人再出圈。以此类推,直到所有的人都出列。请输出依次出圈人的编号。
输入描述
两个整数 n,m(1≤n,m≤100)。
输出描述
n 个用空格分隔的整数,表示出圈人的编号。
用例输入 1
6 4
用例输出 1
4 2 1 3 6 5
参考代码:
#include<iostream>
using namespace std;
int main() {
int n,m;
int a[101]={};
cin>>n>>m;
int cnt = 0,i = 0,k = 0;
while(cnt!=n){
i++;
if(i>n) i = 1;
if(a[i] == 0){
k++;
if(k == m){
cout<<i<<' ';
a[i] = 1;
cnt++;
k = 0;
}
}
}
return 0;
}