描述

  有n只猴子围成一圈,每个有一个编号,编号从1到n。打算从中选出一个大王。经过协商,决定选大王的规则如下:从第一只开始,每隔m只,数到的猴子出圈,最后剩下来的就是大王。

输入

输入为一行两个数,即n,m。

输出

输出最后剩下来的猴子序号。

输入样例

8 4

输出样例

6

 循环链表是指最后一个空间指向头节点的链表类型,可以用于需要在多个数据之间来回循环的题目,比如约瑟夫问题(上面这道就是约瑟夫问题的改版)。普通约瑟夫问题可以用数组做,如上面这道题,用数组做就是这样:

#include<iostream>
using namespace std;
bool b[10000];
int main()
{int js=0,djs=0,i,n,m;cin>>n>>m;for(i=1;i<=n;i++)b[i]=true;i=1;while(djs<n-1){if(i>n)i=1;//判断是否越界if(b[i])js++;//判断这个点有没有出圈if(js==m)//判断是否数到m{js=0;b[i]=false;djs++;}i++;}for(i=1;i<=n;i++)if(b[i]){cout<<i;break;}return 0;
}

有没有注意到,需要判断的次数太多了!这样一旦n和m大起来,TLE是不可避免的。我们可以观察一下,程序主要耗时的地方是判断点有没有出圈、判断是否数到m和数组是否越界。那如果有一种结构可以很快的解决约瑟夫问题的话,就要满足以下条件:

1.出圈的元素可以直接删除,不会再遇到。

2.只需要一个for循环m就可以到达下一个要删除元素的位置。

3.到达最后一个元素自动跳回第一个元素。

很明显,循环链表满足这一切。

循环链表代码如下:

#include<iostream>
using namespace std;
struct node{int date;node *next=NULL;
};
int main()
{node *t,*b,*f;t=new node;t->date=1;b=t;int i,j,n,m,js=0;cin>>n>>m;for(i=1;i<=n;i++)//链表的赋值{f=new node;b->next=f;b=f;b->date=i;}b->next=t->next;//最后一个空间指向第一个元素(注意不是指向头节点!)for(i=0;i<n-1;i++)//循环删除n-1个元素,留下最后一个元素{for(j=1;j<m;j++)t=t->next;//一个for循环m次来到下一个需要删除元素的位置t->next=t->next->next;//删除出圈元素}cout<<t->date;//输出最后剩下的元素return 0;
}

【循环链表】猴子选大王(约瑟夫问题)相关推荐

  1. 猴子选大王--约瑟夫问题浅析

    猴子选大王--约瑟夫问题浅析 猴子选大王问题是一个十分经典的算法问题,这个问题是这样的:一堆猴子都有编号,编号是1,2,3 ...m,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N ...

  2. c语言-猴子选大王-约瑟夫问题(队列,链表,数组)

    猴子选大王 前言:初读此题,根据题意,顺势想到了用刚学的数据结构中的循环队列及循环链表,便想借此来熟练一下新学知识. 题目描述: 一群猴子要选新猴王.新猴王的选择方法是:让N只候选猴子围成一圈,从某位 ...

  3. 蓝桥杯 - 猴子选大王 (约瑟夫问题)

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

  4. 【PHP版·猴子选大王·约瑟夫环】 一堆猴子都有编号,编号是1,2,3 ...m

    一.问题: n只猴子围坐成一个圈,按顺时针方向从1到n编号. 然后从1号猴子开始沿顺时针方向从1开始报数,报到m的猴子出局,再从刚出局猴子的下一个位置重新开始报数, 如此重复,直至剩下一个猴子,它就是 ...

  5. 猴子选王c语言链表程序代码,C语言程序设计-猴子选大王[链表应用]

    2032 猴子选大王 Description 有N只猴子,从1~N进行编号.它们按照编号的顺时针方向排成一个圆圈,然后从第一只猴子开始报数.第一只猴子报的第一个数字为1,以后每只猴子报的数字都是它们前 ...

  6. python猴子选大王_sicily 猴子选大王

    题目描述 猴子选大王,有N只猴子,从1-N进行编号.它们按照编号的顺时针方向,排成一个圆圈,然后从第一只猴子开始报数.第一只猴子报1,以后每只猴子报的数字都是它前面猴子所报数字加1.如果一只猴子报的数 ...

  7. 约瑟夫环-猴子选大王(变型题)

    约瑟夫环-猴子选大王(变型题) 接着上篇猴子选大王继续展开,上篇讲的是有m个猴子,从第一个猴子开始报数,当报到n时,第n个猴子出去,从n+1猴子开始,从1继续报数. 这篇我们来说,从任意猴子k的位置开 ...

  8. 约瑟夫环 猴子选大王

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

  9. 约瑟夫环问题之猴子选大王

    猴子选大王的描述为:n只猴子围成一圈,顺时针方向从1到n编号.之后从1号开始沿顺时针方向让猴子从1,2,...,m依次报数,凡是报到m的猴子,都让其出圈,取消候选资格.然后不停的按顺时针方向报数,让报 ...

  10. Python 猴子选大王(约瑟夫环)算法

    def KingElect(totalNum, startNum, intervalNum):'''猴子选大王totalNum:猴子总数tartNum:开始序号intervalNum:间隔数'''mo ...

最新文章

  1. 2021年还适合参加软件测试培训吗
  2. Struts2的工作流程
  3. C C++ 面试知识总结,包含STL,数据结构等
  4. c语言初学者百题大战答案七,C语言百题大战2405how many minutes
  5. Mysql定时执行任务实现方法
  6. 使用GraphQL的subscription订阅服务器的通知
  7. 计算机如何学会自动地进行图像美学增强?
  8. 《跟波利亚学解题》思维笔记
  9. 总结 15/4/23
  10. python 类和对象 有必要学吗_Python学习——对类和对象的初步理解,初识,与
  11. 最近租房有点烦!技术人如何用Python找到称心如意的“小窝”?
  12. 美国基金教父约翰博格传记(1)
  13. AD09由英文改中文菜单步骤
  14. 智能识别云服务端平台之神【合合信息TextIn】
  15. 《瓦尔登湖》--- 读书笔记
  16. 【What if 系列】拖住那架飞机!
  17. Linux内核4.14版本——mmc core(7)——mmc core主模块(3)总线io setting相关(struct mmc_ios)
  18. R语言多元Logistic逻辑回归 应用案例
  19. 弄懂 JavaScript 执行机制,宏任务和微任务
  20. 大数定律是什么?为何人们更愿意相信从大数据中得到的统计结果,而不是从小数据中得到的经验呢?

热门文章

  1. C语言编程精髓读书笔记(怎样有效地使用断言和避免自由主义编码)
  2. 2.4 设计评选优秀教师和学生的程序,其类结构如图 12.5 所示。当输入一系列教师 或学生的记录后,将优秀学生及教师的姓名列出来。 图 12.5 类结构 类 base char name[8]; 含
  3. Spark行动算子(Action)--reduce算子
  4. POJ-3255 Roadblocks
  5. 服务器托管如何选择合适的idc服务器托管商
  6. arcsinx用计算机怎么算,arcsinx求导(arcsinx如何计算)
  7. 彻底搞懂编码 GBK 和 UTF8
  8. 20180925_Python练习题-三:一个商场在降价促销。如果购买金额50~100元(包含50元和100元)之间,会给10%的折扣;如果购买金额大于100元,会給20%折扣。编写一程序,询问购买价
  9. 如何找回OneNote 误删、丢失的笔记
  10. 洛谷 P1462 通往奥格瑞玛的道路