第四周项目-猴子选大王
一群猴子,编号是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
- #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;
- }
第四周项目-猴子选大王相关推荐
- 第四周 项目5- 猴子选大王
Copyright (c) 2017,烟台大学计算机与控制工程学院 .*All rights reserved. 1.*文件名称: 2.*作 者:武美妤 3.*完成日期:2017年9月23日 4.*版 ...
- 数据结构实践——猴子选大王
本文针对数据结构基础系列网络课程(2):线性表的实践项目. [项目 - 猴子选大王] 一群猴子,编号是1,2,3 -m,这群猴子(m个)按照1-m的顺序围坐一圈.从第1只开始数,每数到第n个,该猴子就 ...
- 数据结构实践——猴子选大王(数组版)
本文针对数据结构基础系列网络课程(5): 数组与广义表的实践项目. [项目 - 猴子选大王(数组版)] 一群猴子,编号是1,2,3 -m,这群猴子(m个)按照1-m的顺序围坐一圈.从第1只开始数,每数 ...
- 数据结构上机实践第四周项目5 - 猴子选大王
数据结构实践--猴子选大王 首先呢,小普及一下 读者:难道你当我不知道 读者想对小编说: 进入正题,项目要求如下: 一群猴子,编号是1,2,3 -m,这群猴子(m个)按照1-m的顺序围坐一圈.从第1只 ...
- 数据结构上机实践第八周项目6- 猴子选大王(数组版)
猴子选大王(数组版) 在之前的项目中,实现了猴子选大王的项目要求,本次实践,将再次实现这个项目,但是运用数组的方法,做到一题多解,集思广益. 项目要求如下:一群猴子,编号是1,2,3 -m,这群猴子( ...
- java线性表猴子选大王,猴子选大王 课程设计报告.doc
猴子选大王 课程设计报告 目录 一.需求分析2 1.问题描述:2 2.基本要求:2 3.需求分析:2 二.概要设计3 三.详细设计4 1.循环队列4 2.循环链表5 3.伪代码6 4.具体函数分析及变 ...
- JAVA猴子选大王问题
题目要求 猴子选大王.输入猴子的个数n,所有的猴子从1-n编号排成一圈,从1号猴子开始数数,数到3的倍数猴子被淘汰,最后剩下的是大王.输出是大王的猴子的编号(提示:使用数组,每个数组元素相当于一个猴子 ...
- 约瑟夫环 猴子选大王
<? /*** 猴子选大王:一群猴子排成一圈,按1,2,-,n依次编号.* 然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去-,* 如此不停的进行下去,直 ...
- 7-28 猴子选大王 (C语言)
7-28 猴子选大王 (20 分)一群猴子要选新猴王.新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号.从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻 ...
最新文章
- ThreadLocal 原理 以及设计思想
- '_NamespacePath' object has no attribute 'sort'
- JavaScript 学习笔记3
- 快速学习AJAX之三 Ajax实现登陆
- oracle to char trim,to_char前面多出空格
- 校园计算机网络系统,校园计算机网络系统
- mysql--SQL编程(关于mysql中的日期) 学习笔记2
- 专供PNG免抠设计素材好地方,做设计到搜图114
- zabbix报错cannot set resource limit: [13] Permission denied解决方法
- Java动态规划求最长公共子序列(LCS)
- Window+Anaconda3+TensorFlow少挖坑安装
- 炼石:栉风沐雨七载路,不负韶华再出发
- 单片机大学生实习感悟体验
- 汽车维修企业管理【10】
- quora 查看自己关注了谁
- Airtag小贵但好用?Beacon防丢功能体验
- 无线路由器的DNS服务器怎么设置,无线路由器dns服务器怎么设置
- 微型计算机接口与技术的交通灯,微机原理与接口技术课程设计——交通灯设计.doc...
- 旺店通与金蝶集成解决方案
- 新浪微博桌面2014 v3.0.4.35238 官方版
热门文章
- 电大英语计算机统考时间2019,2019网络教育统考报名及考试时间-希赛学历中心
- 超详细新手建站指南 让你少走弯路
- 深度学习普里姆算法(Prim)
- 【PTA】计算全班学生C++课程的总成绩和平均成绩 (10 分)
- 物联网百万亿级市场露头
- Android监控软键盘的开启/关闭状态
- MAC安装Homebrew和RVM和ruby和cocospod的整合贴
- 记录edge浏览器无法登录微软账户的修复过程
- Word如何实现一级标题汉字,二级标题数字
- python sobel滤波,数学之路-python计算实战(22)-机器视觉-sobel非线性滤波