精华内容
下载资源
问答
  • 猴子选大王 数据结构

    2010-01-12 09:12:12
    很经典的数据结构练习 很好哦 好 一般的好
  • 猴子选大王 数据结构课程设计 (自己做的课程设计哦)
  • 10、 猴子选大王(*) 任务:一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1--m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子...
  • 链表的运用 通过创建循环链表,是猴子依次出列,最后出列的是猴大王。关键在于计数器的设定
  • 本资源来源于互联网,版权为原作者所有。若侵犯到您的版权, 请提出指正, 我们将立即删除。
  • M个猴子,报数上限为N,循环报数,淘汰猴子。选出猴子
  • 数据结构课程设计--猴子选大王数据结构课程设计--猴子选大王数据结构课程设计--猴子选大王数据结构课程设计--猴子选大王数据结构课程设计--猴子选大王
  • 数据结构课程设计报告:猴子选大王 数据结构课程设计报告:猴子选大王
  • 用c语言实现的猴子选大王程序,是数据结构中的经典案例。里面含有设计报告和源代码。代码拷贝出来即可运行。
  • 数据结构课程设计 猴子选大王 附代码 可以打印猴子
  • printf("输入猴子数 n:"); scanf("%d",&n); printf("输入退出数 k:"); scanf("%d",&k); for(i=1;i;i++) { enQueue(p,i); } while(m!=n-1) { for(i=1;i;i++) { if(i!=k) { j=deQueue(p); enQueue(p,j); }else { j=...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    #include

    #include

    #define MaxSize 100

    typedef struct

    {

    int data[MaxSize];int front;int rear;

    }SegQueue;

    SegQueue* initQueue()

    {

    SegQueue *p;p=(SegQueue *)malloc(MaxSize* sizeof(SegQueue));

    p->front=p->rear=0;

    return p;

    }

    int enQueue(SegQueue*p,int data)

    {

    if((p->rear+1)%MaxSize==p->front) return -1;

    p->data[p->rear]=data;

    p->rear=(p->rear+1)%MaxSize; return 1;

    }

    int deQueue(SegQueue*p)

    {

    int x;if(p->front==p->rear) return -1;

    x=p->data[p->front];

    p->front=(p->front+1)%MaxSize;

    return x;

    }

    void main()

    {

    int m=0,k,i,n,j;

    SegQueue *p;

    p=initQueue();

    printf("输入猴子数 n:");

    scanf("%d",&n);

    printf("输入退出数 k:");

    scanf("%d",&k);

    for(i=1;i<=n;i++)

    {

    enQueue(p,i);

    }

    while(m!=n-1)

    {

    for(i=1;i<=k;i++)

    {

    if(i!=k)

    {

    j=deQueue(p);

    enQueue(p,j);

    }else {

    j=deQueue(p);m++;

    }

    }

    }

    j=deQueue(p);

    printf("大王是:%d\n",j);

    }

    这是一个C的程序。至于C++的还是没有看懂。。

    展开全文
  • 猴子选大王* 任务:一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子大王。 ...
  • 一堆猴子都有编号,编号是1,2,3...m ,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子大王。 要求:输入数据:输入...
  • 猴子选大王C语言源文件。数据结构经典算法,利用链表解决。输入猴子总数和要退出的猴子的序号,输出大王的序号和依次被淘汰的猴子的序号。
  • C版数据结构课程设计——猴子选大王 的源代码,可以测试下
  • 数据结构实践——猴子选大王

    千次阅读 2015-09-12 15:16:28
    本文针对数据结构基础系列网络课程(2):线性表的实践项目。【项目 - 猴子选大王】  一群猴子,编号是1,2,3 …m,这群猴子(m个)按照1-m的顺序围坐一圈。从第1只开始数,每数到第n个,该猴子就要离开此圈,这样...

    本文针对数据结构基础系列网络课程(2):线性表的实践项目。

    【项目 - 猴子选大王】
      一群猴子,编号是1,2,3 …m,这群猴子(m个)按照1-m的顺序围坐一圈。从第1只开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。输入m和n,输出为大王的猴子是几号。

    提示:
    (1)链表解法:可以用一个循环单链表来表示这一群猴子。表示结点的结构体中有两个成员:一个保存猴子的编号,一个为指向下一个人的指针,编号为m的结点再指向编号为1的结点,以此构成环形的链。当数到第n个时,该结点被删除,继续数,直到只有一个结点。
    (2)使用结构数组来表示循环链:结构体中设一个成员表示对应的猴子是否已经被淘汰。从第一个人未被淘汰的数起,每数到n时,将结构中的标记改为0,表示这只猴子已被淘汰。当数到数组中第m个元素后,重新从第一个数起,这样循环计数直到有m-1被淘汰。
    (3)该问题为计算机科学中的经典问题,很多实际的问题可以抽象到这种模型上来。感兴趣的同学请搜索“约瑟夫问题”。

    [参考解答(C++实现)]

    #include <iostream>
    using namespace std;
    struct Monkey
    {
        int num;  //猴子的编号
        struct Monkey *next; //下一只猴子
    };
    
    int main()
    {
        int m,n,i,j,king;
        Monkey *head, *p1,*p2;
        cin>>m>>n;
        if(n==1)
        {
            king=m;
        }
        else
        {
            //建立猴子围成的圆圈
            p1=p2=new Monkey;
            head = p1;
            p1->num=1;
            for(i=1; i<m; i++)  //其余m-1只猴子
            {
                p1=new Monkey;  //p1是新增加的
                p1->num=i+1;
                p2->next=p1;
                p2=p1;          //p2总是上一只
            }
            p2->next=head;      //最后一只再指向第一只,成了一个圆圈
    
            //下面要开始数了
            p1=head;
            for(i=1; i<m; i++)  //循环m-1次,淘汰m-1只猴子
            {
                //从p1开始,数n-1只就找到第n只了
                for(j=1; j<n-1; j++)  //实际先找到第n-1只,下一只将是被淘汰的
                    p1=p1->next;    //围成圈的,可能再开始从第一只数,如果还未被淘汰的话
    
                //找到了,
                p2=p1->next;  //p2将被删除
                //cout<<"第"<<i<<"轮淘汰"<<p2->num<<endl;   //可以这样观察中间结果
                p1->next=p2->next;  //p2就这样被“架空了”
                p1=p2->next;  //下一轮数数的新起点
                delete p2;  //将不在链表中的结点放弃掉
            }
            king=p1->num;
            delete p1;
        }
        cout<<king<<endl;
        return 0;
    }
    展开全文
  • 基于java数据结构链表写的猴子选大王,其实就是一个约瑟夫环问题,采用java数据结构链表写的。有点小问题。当输入一只猴子,报数为1时删除会出错。没有实现动态显示猴子的添加和删除。
  • 数据结构实践——猴子选大王(数组版)

    万次阅读 多人点赞 2015-10-18 11:33:26
    本文针对数据结构基础系列网络课程(5): 数组与广义表的实践项目。【项目1 - 猴子选大王(数组版)】  一群猴子,编号是1,2,3 …m,这群猴子(m个)按照1-m的顺序围坐一圈。从第1只开始数,每数到第n个,该猴子...

    本文针对数据结构基础系列网络课程(5): 数组与广义表的实践项目。

    【项目 - 猴子选大王(数组版)】

      一群猴子,编号是1,2,3 …m,这群猴子(m个)按照1-m的顺序围坐一圈。从第1只开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,最后一只出圈的猴子为大王。输入m和n,输出猴子离开圈子的顺序,从中也可以看出最后为大王是几号猴子。
      要求采用数组作为存储结构完成。

    [参考解答1]

      在一个数组中,数组中用1表示猴子在圈中,用0表示猴子已经出圈,数组下标对应与猴子编号对应(例如数组元素p[0]值为1,表示第1只猴子尚在圈中,即p[i]代表编号为i+1的猴子是否在圈中)。
      一只猴子出圈,则将对应的数组值置为0;在报数过程中,要跨过值为0的猴子。
      若m=8, n=4,初始时数组如下:
    这里写图片描述
      其中有3只猴子出圈后,数组中的值如下:
    这里写图片描述
      数到最后一只猴子时需要折回到下标为0的位置,猴子出圈后,还将对应元素的值置为0。见代码注释。

    #include <stdio.h>
    #define MaxSize 8
    void king(int m,int n)
    {
        int p[MaxSize];
        int i,j,t;
        for (i=0; i<m; i++)         //构建初始序列,记录m只猴子在圈中
            p[i]=1;
        t=-1;                       //首次报数将从起始位置为0,即第1只猴子开始,因为在使用p[t]前t要加1
        printf("出列顺序:");
        for (i=1; i<=m; i++)        //循环要执行m次,有m个猴子要出圈
        {
            j=1;      // j用于报数
            while(j<=n)  //
            {
                t=(t+1)%m;        //看下一只猴子,到达最后时要折回去,所以用%m
                if (p[t]==1) j++; //等同于if (p[t]==1) j++;仅当q猴子在圈中,这个位置才报数
            }
            p[t]=0;   //猴子出圈
            printf("%d ",t+1);      //输出出圈猴子的编号
        }
        printf("\n");
    }
    
    int main()
    {
        int m,n;
        scanf("%d %d", &m, &n);
        king(m,n);
        return 0;
    }

    [参考解答2]

      数组同参考解答1。在报数过程中,不再判断为0为1,而是设置一个用于累加的变量,猴子在圈时加1相当于报数,出圈后是加0相当于没有报数。

    #include <stdio.h>
    #define MaxSize 8
    void king(int m,int n)
    {
        int p[MaxSize];
        int i,s=0,t;
        for (i=0; i<m; i++)         //构建初始序列,记录m只猴子在圈中
            p[i]=1;
        t=0;                        //首次报数的起始位置为0,是第1只猴子
        printf("出列顺序:");
        for (i=1; i<=m; )       //循环要执行m次,有m个猴子要出圈
        {
            s=s+p[t]; //s累加中,猴子在圈时加1相当于报数,出圈后是加0相当于没有报数。
            if(s==n)
            {
                p[t]=0;   //猴子出圈
                printf("%d ",t+1);      //输出出圈猴子的编号
                s=0;   //重新开始累加
                i++;   //报数的猴子加1
            }
            t=(t+1)%m;    //再报数时,从下一只猴子开始
        }
        printf("\n");
    }
    
    int main()
    {
        int m,n;
        scanf("%d %d", &m, &n);
        king(m,n);
        return 0;
    }

    [参考解答3]

      用数组元素保存猴子的编号,一只猴子出圈,执行从数组中删除元素的操作,以此重复。
      若m=8, n=4,初始时数组如下:
    这里写图片描述
      其中有3只猴子出圈后,数组中的值如下:
    这里写图片描述
      数到最后一只猴子时需要折回到下标为0的位置,猴子出圈后,还还要实施删除数组中元素(即将后面的数据前移)的工作。见代码注释。

    #include <stdio.h>
    #define MaxSize 100
    void king(int m,int n)
    {
        int p[MaxSize];
        int i,j,t;
        for (i=0; i<m; i++)         //构建初始序列,记录m只猴子在p[0]~p[m-1]中
            p[i]=i+1;
        t=0;                        //首次报数的起始位置为0
        printf("出列顺序:");
        for (i=m; i>=1; i--)        //循环要执行m次,有m个猴子要出圈;共有i从m开始递减至1,i还表示在圈中猴子的数目
        {
            t=(t+n-1)%i;            //从t开始数1,其后第n-1个将数到n,t加n-1用%i取余,目的是到达最后一个猴子可以折回去继续数
            printf("%d ",p[t]);     //编号为p[t]的元素出列
            for (j=t+1; j<=i-1; j++)//后面的元素前移一个位置,删除了编号为p[t]的猴子
                p[j-1]=p[j];
        }
        printf("\n");
    }
    
    int main()
    {
        int m,n;
        scanf("%d %d", &m, &n);
        king(m,n);
        return 0;
    }
    

    附:用参考解答1的思路,但是错误的程序

    //下面的程序有bug,作为反面案例
    #include <stdio.h>
    #define MaxSize 8
    void king(int m,int n)
    {
        int p[MaxSize];
        int i,j,t;
        for (i=0; i<m; i++)         //构建初始序列,记录m只猴子在圈中
            p[i]=1;
        t=0;                        //首次报数的起始位置为0,是第1只猴子
        printf("出列顺序:");
        for (i=1; i<=m; i++)        //循环要执行m次,有m个猴子要出圈
        {
            j=1;      // j用于报数
            while(j<n) 
            {
                if (p[t]==1) j++; //等同于if (p[t]==1) j++;仅当q猴子在圈中,这个位置才报数
                t=(t+1)%m;     //看下一只猴子,到达最后时要折回去,所以用%m
            }
            //出错原因:上面只数到了第n-1只,但是不能保证下一个一定在圈中。此处可以加一个循环再找下一个在圈中的猴子,但显然没有参考解答1简洁
            p[t]=0;   //猴子出圈
            printf("%d ",t+1);      //输出出圈猴子的编号
            t=(t+1)%m;    //再报数时,从下一只猴子开始
        }
        printf("\n");
    }
    
    int main()
    {
        int m,n;
        scanf("%d %d", &m, &n);
        king(m,n);
        return 0;
    }
    展开全文
  • 数据结构课程设计,主要是写了一个猴子选大王的模拟动画
  • 猴子大王案例编程。 编程要求:猴子大王:一堆猴子都有编号,编号是1,2,3 …m ,这群猴子(m个)按照1–m的顺序围坐一圈,从第1开始数,每数到第... 编程输出该猴子大王的编号。 { int p[999]; int i,...

    猴子选大王案例编程。

    编程要求:猴子选大王:一堆猴子都有编号,编号是1,2,3 …m ,这群猴子(m个)按照1–m的顺序围坐一圈,从第1开始数,每数到第n个(n<m),该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。 编程输出该猴子大王的编号。

    #include <stdio.h>
    int main()
    { 
     int p[999];
     int i,j,t;
        int m,n;
        scanf("%d %d", &m, &n);
        for (i=0; i<m; i++)        
            p[i]=1;    //把所有猴子都先定义为1,此时所有猴子都没出圈
        t=-1;         // 数组里从0开始,所以为了后面的t+1要先定义t=-1(这里从后面用到了时回过来定义,直接想,想不起来)                 
        printf("大王:");
        for (i=1; i<=m; i++)        
        {
            j=1;     //这个是为了数到n(不知道咋解释,自己理解吧)
            while(j<=n) //数了n个猴子后跳出,开始淘汰
            {
                t=(t+1)%m;  //看下一个,取整是为了超出m后能循环      
                if (p[t]==1) j++;//当经过的猴子都是在圈里,也就是1的时候正常参加循环,当为0的时候就代表没在群里,j就不加1,也就是直接跨过去
            }
            p[t]=0; //数到n个时,把第n个变成0,代表出圈 
                
        }
     printf("%d ",t+1); //最后一个出圈的,也就是最后的大王
        printf("\n");
        return 0;
    }
    

    运行结果
    运行结果图

    关注公众号,了解更多。
    在这里插入图片描述

    展开全文
  • 数据结构-猴子选大王

    2009-04-20 23:05:56
    绝对原代码,能很好的运行,数据结构的大型作业中常用的经典。是本人大型作业之一。
  • C语言课程设计之猴子选大王(约瑟夫问题)有详细流程,有源代码,希望对你有帮助
  • 设计内容:一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子大王。...
  • 本课题利用数据结构知识设计一个猴子选大王系统,该系统主要由总体设计,详细设计程序清单,程序调试与体会,运行结果五部分组成。通过本课题练习,对综合知识应用能力、设计能力将有较大提高,对今后从事软件的研制...
  • 这是去年我做的数据结构课程设计的实验报告,里面有源代码。
  • 数据结构课程设计论文 猴子选大王 C++. 本资源包括以下内容:一组三人一人一份分别11\11\13页的程序设计报告,一人一份的任务书,外加一份设计报告PPT, 还有源程序,里面有exe可执行文件,可以直接看效果!
  • 应该过编译,我曾在vc上试过。 #include"stdio.h" #include"malloc.h" #define maxsize 50 typedef struct // 队列定义 {int data[maxsize]; // 对长为50 int front,rear; //定义首尾指针; }SeqQueue;
  • n只猴子选大王,选举办法如下:所有猴子按1、2、3、……、n编号围坐一圈,从第1号开始按照1、2、3、……、m报数,凡报m号的退出圈外,如此循环报数,直到圈内剩下一只猴子时,这只猴子就是大王。n和m由键盘输入,...
  • 猴子选大王

    2012-06-03 15:21:05
    数据结构问题猴子选大王猴子选大王问题 C程序

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 791
精华内容 316
关键字:

猴子选大王数据结构

数据结构 订阅