蓝桥杯 - 猴子选大王 (约瑟夫问题)
标题:猴子选大王
一群猴子要选新猴王。新猴王的选择方法是:让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,2,3 ...m,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N ...
- c语言-猴子选大王-约瑟夫问题(队列,链表,数组)
猴子选大王 前言:初读此题,根据题意,顺势想到了用刚学的数据结构中的循环队列及循环链表,便想借此来熟练一下新学知识. 题目描述: 一群猴子要选新猴王.新猴王的选择方法是:让N只候选猴子围成一圈,从某位 ...
- 【PHP版·猴子选大王·约瑟夫环】 一堆猴子都有编号,编号是1,2,3 ...m
一.问题: n只猴子围坐成一个圈,按顺时针方向从1到n编号. 然后从1号猴子开始沿顺时针方向从1开始报数,报到m的猴子出局,再从刚出局猴子的下一个位置重新开始报数, 如此重复,直至剩下一个猴子,它就是 ...
- 猴子选王c语言链表程序代码,C语言程序设计-猴子选大王[链表应用]
2032 猴子选大王 Description 有N只猴子,从1~N进行编号.它们按照编号的顺时针方向排成一个圆圈,然后从第一只猴子开始报数.第一只猴子报的第一个数字为1,以后每只猴子报的数字都是它们前 ...
- python猴子选大王_sicily 猴子选大王
题目描述 猴子选大王,有N只猴子,从1-N进行编号.它们按照编号的顺时针方向,排成一个圆圈,然后从第一只猴子开始报数.第一只猴子报1,以后每只猴子报的数字都是它前面猴子所报数字加1.如果一只猴子报的数 ...
- 约瑟夫环-猴子选大王(变型题)
约瑟夫环-猴子选大王(变型题) 接着上篇猴子选大王继续展开,上篇讲的是有m个猴子,从第一个猴子开始报数,当报到n时,第n个猴子出去,从n+1猴子开始,从1继续报数. 这篇我们来说,从任意猴子k的位置开 ...
- 约瑟夫环 猴子选大王
<? /*** 猴子选大王:一群猴子排成一圈,按1,2,-,n依次编号.* 然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去-,* 如此不停的进行下去,直 ...
- 约瑟夫环问题之猴子选大王
猴子选大王的描述为:n只猴子围成一圈,顺时针方向从1到n编号.之后从1号开始沿顺时针方向让猴子从1,2,...,m依次报数,凡是报到m的猴子,都让其出圈,取消候选资格.然后不停的按顺时针方向报数,让报 ...
- Python 猴子选大王(约瑟夫环)算法
def KingElect(totalNum, startNum, intervalNum):'''猴子选大王totalNum:猴子总数tartNum:开始序号intervalNum:间隔数'''mo ...
最新文章
- python bindings_OpenCV-Python Bindings 如何工作 | 六十四
- -bash: git: command not found
- 拓展小知识(一)——使用 CSS 和 JS 加载阿里小图标
- 深度学习tensorflow实现宝可梦图像分类
- 【bzoj5064】B-number 数位dp
- VHDL实现打地鼠游戏设计
- LVS之一:基本命令和调度方法
- php小偷程序生成,php开发:php小偷程序实例代码
- 附pdf下载 | 《机器学习数学基础》电子书
- Windows 查看端口占用情况并关闭端口
- win10iot c语言,Win10 IoT系统是什么版本?
- 指纹识别实战——基于TensorFlow实现(文末送书)
- 计算机pm,PM、PMP、PMO分别都是什么 以及三者的关系
- Springboot注解@ServletComponentScan和@ComponentScan
- 用 Python 的 tkinter 模块编写一个好看又强大的中国象棋
- Clementine简介
- ora-01017: 用户名/口令无效; 登录被拒绝
- 360 主页劫持修复
- 京东校招编程题——小熊分苹果
- 数字乡村建设三个典型案例
热门文章
- 计算机一级 销售统计表,销售统计表计算机windows一级最新考试试题
- 西门子与IDS携手合作,为Simcenter新增高频电磁工程解决方案
- 交互设计课程心得体会
- 弘辽科技:2021年天猫618现货商品活动价格要求是什么?
- 善用Navicat的SSH代理
- axure 8 表格合并_如何在表格做数据分析?这个例子教你轻松入门
- linux系统支持游戏,2017 年 30 款最好的支持 Linux 的 Steam 游戏
- 币氪研报l Gxshare(GXS)
- 单源(多源)最短路算法Dijkstra、Bellman-Ford、SPFA
- uni-app开发微信公众号