选太子(select the prince)

描述:

 

某皇帝有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;
    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值