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

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

[csharp]  view plain copy
  1. #include <iostream>
  2. using namespace std;
  3. struct Monkey
  4. {
  5. int num;  //猴子的编号
  6. struct Monkey *next; //下一只猴子
  7. };
  8. int main()
  9. {
  10. int m,n,i,j,king;
  11. Monkey *head, *p1,*p2;
  12. cin>>m>>n;
  13. if(n==1)
  14. {
  15. king=m;
  16. }
  17. else
  18. {
  19. //建立猴子围成的圆圈
  20. p1=p2=new Monkey;
  21. head = p1;
  22. p1->num=1;
  23. for(i=1; i<m; i++)  //其余m-1只猴子
  24. {
  25. p1=new Monkey;  //p1是新增加的
  26. p1->num=i+1;
  27. p2->next=p1;
  28. p2=p1;          //p2总是上一只
  29. }
  30. p2->next=head;      //最后一只再指向第一只,成了一个圆圈
  31. //下面要开始数了
  32. p1=head;
  33. for(i=1; i<m; i++)  //循环m-1次,淘汰m-1只猴子
  34. {
  35. //从p1开始,数n-1只就找到第n只了
  36. for(j=1; j<n-1; j++)  //实际先找到第n-1只,下一只将是被淘汰的
  37. p1=p1->next;    //围成圈的,可能再开始从第一只数,如果还未被淘汰的话
  38. //找到了,
  39. p2=p1->next;  //p2将被删除
  40. //cout<<"第"<<i<<"轮淘汰"<<p2->num<<endl;   //可以这样观察中间结果
  41. p1->next=p2->next;  //p2就这样被“架空了”
  42. p1=p2->next;  //下一轮数数的新起点
  43. delete p2;  //将不在链表中的结点放弃掉
  44. }
  45. king=p1->num;
  46. delete p1;
  47. }
  48. cout<<king<<endl;
  49. return 0;
  50. }

第四周项目-猴子选大王相关推荐

  1. 第四周 项目5- 猴子选大王

    Copyright (c) 2017,烟台大学计算机与控制工程学院 .*All rights reserved. 1.*文件名称: 2.*作 者:武美妤 3.*完成日期:2017年9月23日 4.*版 ...

  2. 数据结构实践——猴子选大王

    本文针对数据结构基础系列网络课程(2):线性表的实践项目. [项目 - 猴子选大王] 一群猴子,编号是1,2,3 -m,这群猴子(m个)按照1-m的顺序围坐一圈.从第1只开始数,每数到第n个,该猴子就 ...

  3. 数据结构实践——猴子选大王(数组版)

    本文针对数据结构基础系列网络课程(5): 数组与广义表的实践项目. [项目 - 猴子选大王(数组版)] 一群猴子,编号是1,2,3 -m,这群猴子(m个)按照1-m的顺序围坐一圈.从第1只开始数,每数 ...

  4. 数据结构上机实践第四周项目5 - 猴子选大王

    数据结构实践--猴子选大王 首先呢,小普及一下 读者:难道你当我不知道 读者想对小编说: 进入正题,项目要求如下: 一群猴子,编号是1,2,3 -m,这群猴子(m个)按照1-m的顺序围坐一圈.从第1只 ...

  5. 数据结构上机实践第八周项目6- 猴子选大王(数组版)

    猴子选大王(数组版) 在之前的项目中,实现了猴子选大王的项目要求,本次实践,将再次实现这个项目,但是运用数组的方法,做到一题多解,集思广益. 项目要求如下:一群猴子,编号是1,2,3 -m,这群猴子( ...

  6. java线性表猴子选大王,猴子选大王 课程设计报告.doc

    猴子选大王 课程设计报告 目录 一.需求分析2 1.问题描述:2 2.基本要求:2 3.需求分析:2 二.概要设计3 三.详细设计4 1.循环队列4 2.循环链表5 3.伪代码6 4.具体函数分析及变 ...

  7. JAVA猴子选大王问题

    题目要求 猴子选大王.输入猴子的个数n,所有的猴子从1-n编号排成一圈,从1号猴子开始数数,数到3的倍数猴子被淘汰,最后剩下的是大王.输出是大王的猴子的编号(提示:使用数组,每个数组元素相当于一个猴子 ...

  8. 约瑟夫环 猴子选大王

    <? /*** 猴子选大王:一群猴子排成一圈,按1,2,-,n依次编号.* 然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去-,* 如此不停的进行下去,直 ...

  9. 7-28 猴子选大王 (C语言)

    7-28 猴子选大王 (20 分)一群猴子要选新猴王.新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号.从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻 ...

最新文章

  1. ThreadLocal 原理 以及设计思想
  2. '_NamespacePath' object has no attribute 'sort'
  3. JavaScript 学习笔记3
  4. 快速学习AJAX之三 Ajax实现登陆
  5. oracle to char trim,to_char前面多出空格
  6. 校园计算机网络系统,校园计算机网络系统
  7. mysql--SQL编程(关于mysql中的日期) 学习笔记2
  8. 专供PNG免抠设计素材好地方,做设计到搜图114
  9. zabbix报错cannot set resource limit: [13] Permission denied解决方法
  10. Java动态规划求最长公共子序列(LCS)
  11. Window+Anaconda3+TensorFlow少挖坑安装
  12. 炼石:栉风沐雨七载路,不负韶华再出发
  13. 单片机大学生实习感悟体验
  14. 汽车维修企业管理【10】
  15. quora 查看自己关注了谁
  16. Airtag小贵但好用?Beacon防丢功能体验
  17. 无线路由器的DNS服务器怎么设置,无线路由器dns服务器怎么设置
  18. 微型计算机接口与技术的交通灯,微机原理与接口技术课程设计——交通灯设计.doc...
  19. 旺店通与金蝶集成解决方案
  20. 新浪微博桌面2014 v3.0.4.35238 官方版

热门文章

  1. 电大英语计算机统考时间2019,2019网络教育统考报名及考试时间-希赛学历中心
  2. 超详细新手建站指南 让你少走弯路
  3. 深度学习普里姆算法(Prim)
  4. 【PTA】计算全班学生C++课程的总成绩和平均成绩 (10 分)
  5. 物联网百万亿级市场露头
  6. Android监控软键盘的开启/关闭状态
  7. MAC安装Homebrew和RVM和ruby和cocospod的整合贴
  8. 记录edge浏览器无法登录微软账户的修复过程
  9. Word如何实现一级标题汉字,二级标题数字
  10. python sobel滤波,数学之路-python计算实战(22)-机器视觉-sobel非线性滤波