2 international470 international470 于 2016.03.15 13:06 提问

经典问题:猴子选大王!本人c语言新手♛

山上住着10个猴子,猴子编号从1到10。现要从中选出一个大王。猴子们围成一圈,从第一个猴子开始数数,数到n就退出圈子,直到剩下最后一个猴子,并输出猴子王的编号。图片说明

3个回答

international470
international470   2016.03.15 13:07
已采纳

刚学一维数组。。。。

qq423399099
qq423399099   Ds   Rxr 2016.03.15 14:41

这里将人数定死在10个人了

#include<stdio.h>
#include<iostream>
using namespace std;

int main()
{
    int i, j, k, m;
    int num[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};//以1至n为序给每个人编号
    printf("输入报数的数字:j=");
    scanf("%d",&j);

    i = 0;//i为每次循环时计数变量
    k = 0;//k为按1,2,3...报数时的计数变量
    m = 0;//m为退出人数
    while(m < 9)//当退出人数比n-1少时执行循环体
    {
        if(num[i] != 0)//当前的这个人还没有出局
            k++;
        if(k == j)//这个人这轮需要出局
        {
            printf("出局人序号:%d\n", num[i]);
            num[i] = 0;//将退出的人的编号置为0
            k = 0;//k报到j后,重置为0
            m++;//退出的人数+1
        }
        i++;
        if(i == 10)
            i = 0;//报数到尾后,i恢复为0
    }
    for(i = 0; i < 10; i++)
    {
        if(num[i] != 0)
            printf("最后留下的人的编号是:%d\n", num[i]);//只有一个num[i]不是0
    }

    system("pause");
    return 0;
}

运行结果:
图片说明

international470
international470 ε٩(๑> ₃ <)7з么么哒
2 年多之前 回复
international470
international470 真是太感谢你了!
2 年多之前 回复
sinat_24820331
sinat_24820331   2016.04.04 17:12

这是个经典的循环链表 具体的写不出来

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
链表经典问题——猴子选大王
n只猴子要选大王,选举方法如下:所有猴子按 1,2 ……… n 编号并按照顺序围成一圈,从第 1个猴子起,由1开始报数,报到m时,该猴子就跳出圈外,下一只猴子再次由1开始报数,如此循环,直到圈内剩下一只猴子时,这只猴子就是大王。 #include #include using namespace std; typedef struct snode { int data; struct
循环链表 猴子选大王
/* 循环链表 猴子选大王 */ #include #include typedef struct monkey { int num; struct monkey * next; } monkey_t; //head指向第一个节点,tail指向最后一个节点 monkey_t *head = NULL, *tail = NULL; void create(in
【C语言】猴子选大王问题
猴子选大王问题,题目如下 N只猴子站成一行,每隔 M 只从头到尾报数,反复进行,报过数的退出,打印每次退出的猴子的编号,直到剩下一只为止;N 只猴子站成一行,每 M 只报数。先从头到尾,报到尾后,再返回从尾到头报数,打印每次方向及过程,直到剩下二只时,以排到后面的(指报数方向)为大王;N 只猴子围成一圈,从第 P 个开始,每隔 M 只报数,打印每次过程,只剩下 一个时为大王。
C语言实现猴子选大王(约瑟夫问题)
 这里使用数组模拟循环链表 #include int main() {  int leftCount = 15;  //剩余猴子的数量  int countNum = 0;   //目前数到了第几个  int index = 0;      //定义当前数组的下标从0开始。  int number = 7;   //数到第七个猴子就退出  int a[15];    //一
猴子选大王C语言编码
用C语言实现猴子选大王的过程及其结果的源代码
猴子选大王(c源代码)
今天在一个论坛上看到一个关于猴子选大王的源代码,看了以后,里面有几处的错误,就动手改了一下,发出来,给朋友们看看。++++++++++++++++++++++++++++++++++#include#define M 10/*定义猴子总数*/ #define S 3/*数猴子轮N出圈*/ void main() {        int i,j,k,temp,a[M];        fo
猴子选大王 C语言编写 数据结构经典问题
猴子选大王C语言源文件。数据结构经典算法,利用链表解决。输入猴子总数和要退出的猴子的序号,输出大王的序号和依次被淘汰的猴子的序号。
猴子选大王算法
一群猴子排成一圈,按1,2,...,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去...,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。 [html] view plain copy php  /**  * 猴子选大王  *  * @p
5-28 猴子选大王
一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王? 输入格式: 输入在一行中给一个正整数N(≤1000)。 输出格式: 在一行中输出当选猴王的编号。 输
c语言之猴子选大王
辛苦的仔细研究了一通C语言的链表,终于把猴子选大王的改编版做出来了。 题目是: 将m个猴子围成一圈,每一个猴子还带一个密码,从第一个猴子开始,猴子的密码就是从这个猴子开始数的第n个点到被删除的数,被删除的猴子的密码又成为下一个n值。通过链表将考虑如果第一个猴子密码为1时,第一个猴子密码不为1 时,和第一次被删除后,按照这个猴子的密码数数找到下一个目标的情况。 我用了留下头结点和尾指针的单项的循