约瑟夫问题
显示标签
时间限制:C/C++ 1000MS,其他语言 2000MS
内存限制:C/C++ 256MB,其他语言 512MB
难度:中等
描述
n个人(n<=100)围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再出圈,…依次类推,直到所有的人都出圈,请输出依次出圈人的编号。
输入描述
第1行:n m(1<=m,n <= 100)
输出描述
出圈的编号。
用例输入 1
10 3
用例输出 1
3 6 9 2 7 1 8 5 10 4
题解
#include <iostream>
using namespace std;
const int N = 105;
int a[N];
int main()
{
int num, b;
cin >> num >> b;
for(int i = 1; i <= num; i ++)
a[i] = 1;
int n = 0, m = 0;
int c = 0;
while(c != num)
{
n ++;
if(a[n] != 0)
m ++;
if(m == b)
{
m = 0;
a[n] = 0;
cout << n << " ";
c ++;
}
if(n == num)
n = 0;
}
return 0;
}