标题:猴子选大王

一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?

输入格式:

输入在一行中给一个正整数N(≤1000)。

输出格式:

在一行中输出当选猴王的编号。

输入样例:

11

输出样例:

7

思路一:用数组模拟一个环,存储第下标+1位猴子是否退出(因为下标从0开始),数组初始化为0,每次轮到数3的猴子就将他的下标置为-1,最后一个下标不为-1的猴子就是选中的王。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3
 4 const int N = 1000; //共有N个猴子
 5
 6 int a[N];   //用数组和%操作模拟圈
 7
 8 int index = 0;  //下标index
 9 int i = 1;  //用来对3计数
10 int counter;    //记录每次剩下的猴子个数
11
12 int main()
13 {
14     int num;    //num是猴子的数量
15     cin >> num;
16     counter = num;
17
18     while(counter > 1)
19     {
20         if(a[index] != -1)  //当下标为index的猴子还在圈内时
21         {
22             if(i == 3)
23             {
24                 a[index] = -1;  //将数到3的猴子退出圈子 ,将下标置为-1
25                 counter--;  //剩下的猴子总个数-1
26             }
27
28             i++;
29
30             if(i > 3)   //i=4时候,i要回到1
31             {
32                 i = i % 3;
33             }
34         }
35
36         index++;
37
38         if(index >= num)    //当下标达到了猴子总数时,要回到开头
39         {
40             index = index % num;
41         }
42
43     }
44
45     for(int i = 0; i < num; i++)
46     {
47         if(a[i] != -1)
48         {
49             cout << i + 1; //数组下标是从0开始的,要+1
50         }
51     }
52
53     return 0;
54 }

思路2:使用递归思想

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3
 4 int fun(int n)
 5 {
 6     if(1 == n)
 7     {
 8         return 0;
 9     }
10
11     return (fun(n - 1) + 3) % n;
12 }
13
14 int main()
15 {
16     int n;
17     cin >> n;
18     cout << fun(n) + 1;
19     return 0;
20 }

转载于:https://www.cnblogs.com/WindSun/p/10560015.html

蓝桥杯 - 猴子选大王 (约瑟夫问题)相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

  7. 约瑟夫环 猴子选大王

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

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

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

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

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

最新文章

  1. python bindings_OpenCV-Python Bindings 如何工作 | 六十四
  2. -bash: git: command not found
  3. 拓展小知识(一)——使用 CSS 和 JS 加载阿里小图标
  4. 深度学习tensorflow实现宝可梦图像分类
  5. 【bzoj5064】B-number 数位dp
  6. VHDL实现打地鼠游戏设计
  7. LVS之一:基本命令和调度方法
  8. php小偷程序生成,php开发:php小偷程序实例代码
  9. 附pdf下载 | 《机器学习数学基础》电子书
  10. Windows 查看端口占用情况并关闭端口
  11. win10iot c语言,Win10 IoT系统是什么版本?
  12. 指纹识别实战——基于TensorFlow实现(文末送书)
  13. 计算机pm,PM、PMP、PMO分别都是什么 以及三者的关系
  14. Springboot注解@ServletComponentScan和@ComponentScan
  15. 用 Python 的 tkinter 模块编写一个好看又强大的中国象棋
  16. Clementine简介
  17. ora-01017: 用户名/口令无效; 登录被拒绝
  18. 360 主页劫持修复
  19. 京东校招编程题——小熊分苹果
  20. 数字乡村建设三个典型案例

热门文章

  1. 计算机一级 销售统计表,销售统计表计算机windows一级最新考试试题
  2. 西门子与IDS携手合作,为Simcenter新增高频电磁工程解决方案
  3. 交互设计课程心得体会
  4. 弘辽科技:2021年天猫618现货商品活动价格要求是什么?
  5. 善用Navicat的SSH代理
  6. axure 8 表格合并_如何在表格做数据分析?这个例子教你轻松入门
  7. linux系统支持游戏,2017 年 30 款最好的支持 Linux 的 Steam 游戏
  8. 币氪研报l Gxshare(GXS)
  9. 单源(多源)最短路算法Dijkstra、Bellman-Ford、SPFA
  10. uni-app开发微信公众号