首页 留言 登录
猴子选大王

一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?

输入格式:

输入在一行中给一个正整数N(≤1000)。

输出格式:

在一行中输出当选猴王的编号。

输入样例:

11

输出样例:

7

#include<bits/stdc++.h>
using namespace std;

int a[1000];         //用数组和%操作模拟圈
int index = 0;       //下标index
int i = 0;           //用来对3计数
int m;               //记录每次剩下的猴子个数

int main()
{
    int n;     //n是猴子的原始数量
    cin >> n;  //n=11
    m = n;

    do{
        ++index;    // index从1开始,只要n超过1个,index就递增 
        if(index>n) //当index超过n时,index回到第一个,数组成了一个环 
            index = 1;
        if(a[index] != -1) 
            //index号猴子报数,++i 
            cout <<  index << "号猴子" << "报" << ++i << endl;        
//            ++i;
        if(i==3){                         //当3时 
            a[index] = -1;                  //a[index] 出圈 
            m--;                          //猴子数-1 
            i = 0;                        //下次报数1 
        }
    } while(m > 1);

   for(int i=1;i<=n;i++) {
        if(a[i] == 0){
            cout << i;
        }
   }

    return 0;
}
上一篇:5.5输入n个整数,存放到数组a[1]到a[n]中,输出最大数所在的位置
下一篇:5.4约瑟夫问题
验证码
评论留言 (0条)