总时间限制(Time limit):
1000ms
内存限制(Memory limit):
65536kB
描述(Description)

有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始报数,一直数到m,数到m的猴子退出圈外,剩下的猴子再接着从1开始报数。就这样,直到圈内只剩下一只猴子时,这个猴子就是猴王,编程求输入n,m后,输出最后猴王的编号。
There are n monkeys who surround in a circle to select their king (numbered from 1 to n). They count off from the first monkey until m. The monkey who counts m leaves the circle and then the left monkeys count off from 1 again. Keep like this, and there will be only one monkey in the circle at last. And this one is the monkey king. You are asked to output the serial number of the monkey given the input n and m.

输入(Input)

输入包含两个整数,第一个是n,第二个是m (1<m,n<=300)。
The input contains two intergers. The first one is n and the second is m((1<m,n<=300).

输出(Output)

输出包含一行,即最后猴王的编号。
The output contains one line, the serial number of the monkey king.

样例输入(Sample input)

12 4

样例输出(Sample output)

1

<span style="font-size:14px;">#include <iostream>
using namespace std;struct monkey
{int num;monkey *next;
};int joseph(int sum, int cycle)
{int i;monkey *p_old, *p_new, *head=NULL;head = new monkey;
//此处创建一个循环链表(create a circular chained table)head->num = 1;p_old = head;for(i=2; i<=sum; i++){p_new = new monkey;p_new->num = i;p_old->next = p_new;p_old = p_new;}p_old->next = head; //把尾巴链接到 head p_old = head; i = 1;
//循环删除元素直到只剩下最后一个元素(delete elements circularly until the last element left)while(1){p_new = p_old->next;i++;if ( p_old->num == p_new->num) //or if (sum == 1)break;if((i % cycle) == 0){p_old->next = p_new->next;p_old = p_old->next;
//          sum--;delete p_new;i = 1;}else{p_old = p_new;}}return p_new->num;
}int main(void)
{int n,m;cout<<"How many monkeys are there? input the number(n): ";cin>>n;cout<<"What's the numebr you wanna call? input(m): ";cin>>m;cout<<"In this circumstance, the monkey king is the No.";cout << joseph(n,m)<<endl;return 0;
}</span>

循环链表-约瑟夫问题-猴子选大王相关推荐

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

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

  2. 约瑟夫环 猴子选大王

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

  3. 约瑟夫问题(猴子选大王)

    n只猴子要选大王,选举方法如下:所 有猴子按 1,2 --- n 编号并按照顺序围成一圈, 从第 k 个猴子起,由1开始报数,报到m时,该猴子就跳出圈外, 下一只猴子再次由1开始报数, 如此循环,直到 ...

  4. 约瑟夫环 猴子选大王的问题

    问题: 有M只猴子围成一圈,按序每只从1到M中的编号,打算从中选出一个大王:经过协商,决定出选大王的规则:从第一个开始循环报数,数到N的猴子出圈,最后剩下来的就是大王.要求:从键盘输入M.N,编程计算 ...

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

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

  6. 数据结构猴子选大王java_数据结构例子-猴子选大王

    约瑟夫问题(猴子选大王):   n只猴子要选大王,选举办法如下:所有猴子按1,2,-,n编号围坐一圈,从第一号开始按1,2,-,m报数,凡报m号的推出圈外,如此循环报数,直到圈内剩下一只猴子时,这只猴 ...

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

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

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

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

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

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

最新文章

  1. 965. Univalued Binary Tree
  2. 打开闪光灯java代码_android 拍照带水印(可打开闪光灯功能)
  3. 径向基函数插值(1)
  4. 对实体 quot;useSSLquot; 的引用必须以 ';' 分隔符结尾
  5. iOS之深入解析渲染的底层原理
  6. 作者:李崇纲,男,北京金信网银金融信息服务有限公司常务副总经理。
  7. 熟悉mysql数据库设计和性能优化_Mysql数据库性能优化
  8. python进阶14文件路径(找不到文件)
  9. 再谈编程范式—程序语言背后的思想
  10. 给妹子讲python-S01E05字符串的基本用法详解
  11. layer code 200转码 写一个后台封装通用实体类
  12. 看雪 好文 汇集贴(持续更新)
  13. python操作mysql时mysqldb和pymysql的安装和使用
  14. Homebrew简单使用
  15. de4dot 反混淆工具使用
  16. 您需要 “企业内容管理“(ECM)还是 “文档管理系统”(DMS)?
  17. hlw8012电能测量芯片(多组功率电流测量)
  18. 【抓否】哪来的“独角兽”——360私有化,富士康开飞机上市,宁德时代、药明康德这一系列闪电过会
  19. C语言之基本算法15—前三位和后三位都是完全平方数的六位完全平方数
  20. 【惑星记】python学习002----------------pyqt5安装

热门文章

  1. 团体程序设计天梯赛-L2组
  2. LTE:PCFICH资源映射推导总结
  3. STM32L0xx_HAL_Driver库的使用——UART续
  4. Java 实例-打印图形
  5. STM32如何配置HAL库
  6. 解读BPM风潮:缘何受到企业青睐?(转载)
  7. 诚之和:SQL 左连接 - 示例连接语句语法
  8. math.h 三角函数
  9. 华为S9306 如何进行访问控制配置
  10. Flash交互课件模版