猴子选大王

Posted jiaweigao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了猴子选大王相关的知识,希望对你有一定的参考价值。

今天我们要写的是“猴子选大王”,一道经典到不能再经典的C++编程题。

有 n 只猴子围成一圈,从 1 - n 编号,大家决定从中选出一个大王。经过协商,决定选大王的规则为:从编号为1的猴子开始报数,报到 k 的猴子出圈,然后再从下一只开始继续报 1 到 k ……,最后剩下来的那一只就是大王。要求编程从键盘输入 n、k ,输出成为大王的猴子编号。

【输入】

一行两个正整数 n 和 k 

【输出】

一行一个正整数,代表猴王的编号

【样例输入】

3 2

【样例输出】

3

题解:

一般人的代码:

#include <stdio.h>
int main()
{
    int N;
    int a[1000];
    scanf("%d", &N);
    int count = 0, number = N;
    for (int i = 0; i < N; i++)
        a[i] = i + 1;
    while (number > 1)
    {
        for (int i = 0; i < N; i++)
        {
            if (a[i] == 0)
                continue;
            count++;
            if (count == 3)
            {
                a[i] = 0;
                count = 0;
                number--;
            }
        }
    }
    for (int i = 0; i < N; i++)
        if (a[i] != 0)
            printf("%d", a[i]);
 
    return 0;
}

高手的代码(多想一会)

#include<iostream>
using namespace std;
int main()
{
    int n,m,k,r,q;
    cin>>n>>k;
    m=n*k;
    while(n>m)
    {
        r=(m-n)%(k-1)l
        if(r==0)
            r=k-1;
        q=(m-n-r)/(k-1);
        m=k*q+r;
    }
    cout<<m;
    return 0;    
}

大佬的代码(就是我)

#include<iostream>
using namespace std;
int main()
{
    int n,k;
    cin>>n>>k;
    int i,ans=0;
    for(i=2;i<=n;i++)
        ans=(ans+k)%i;
    cout<<ans+1;
    return 0;
}

有图有真相(注意代码长度)

技术分享图片

 

以上是关于猴子选大王的主要内容,如果未能解决你的问题,请参考以下文章

用C++实现只猴子选大王,选举办法如下:从头到尾 1,2,3报数,凡报3的退出,余下的从下一个开始循环

7-28 猴子选大王(20 分)

猴子选大王-程序

java实现猴子选大王问题(约瑟夫问题)

猴子选大王(约瑟夫环)

用C语言编写猴子选大王程序(数据结构)