描述:
某皇帝有2m个儿子,现在要从中选出一个做太子,皇帝不知道该把那一个皇子立为太子,于是决定用下面的方法来选出太子,设每个太子的编号分别1、2、3、…、2m,按顺时针方向站成一个圆圈,现在从1号太子开始按顺时针方向数,数到第n个人,把他淘汰出局,然后从他的下一个人开始上述过程,当第m个人被淘汰时,转变方向继续从1开始数,重复上述过程,最后剩下的皇子将被立为太子。现在请你写一个程序,计算出几号皇子将被立为太子。
输入:
输入两个正整数m n
Input two positive integer.
输出:
输出太子的编号
Output the number.
输入样例:
3 2
输出样例:
1
#include<iostream>
using namespace std;
int main() {
int m, n;
cin >> m >> n;
int a[20] = { 0 };
int p = 2 * m;//2m
int s = 0;//出局人数
int c = 0;//关于n的计数器
int i=0;
while (s < m ) {
if (a[i] == 0) {
c++;
}
if (c == n) {
a[i] = 1;
s++;
c = 0;
}
i = (i + 1) % p;
}
while (s>=m&&s<p-1)
{ if (i == 0)
i = p - 1;
else
i = i - 1;
if (a[i] == 0)
c++;
if (c == n){
a[i] = 1;
s++;
c = 0;
}
}
int j;
for (j = 0; j < p; j++) {
if (a[j] == 0)
cout << j+1 << endl;
}
return 0;
}