猴子问题----约瑟夫环算法
一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?
这是PAT基础编程上的一道题
初始想法
利用一个循环链表,遍历到待删除的节点则把他删除出去
直到只剩一个节点为止
这个算法不管是写起来还是运行起来都是费力不讨好
后来查阅资料发现代码可以简洁到
#include <stdio.h>
int main()
{int sum=0,n;scanf("%d",&n);for(int i=2;i<=n;i++)sum = (sum+3)%i;printf("%d",sum+1);return 0;
}
这里主要涉及了数学问题—约瑟夫环
套用数学公式求解
递推公式
f(N,M)=(f(N−1,M)+M)%N
f(N,M)表示,N个人报数,每报到M时杀掉那个人,最终胜利者的编号
f(N−1,M)
f(N−1,M)表示,N-1个人报数,每报到M时杀掉那个人,最终胜利者的编号
绿色为数组下标
黄色为最后所找到的“王”
整张图可以看成一串数不断往左移
猴子问题----约瑟夫环算法相关推荐
- java实现约瑟夫环完整算法_Java简单实现约瑟夫环算法示例
Java简单实现约瑟夫环算法示例 发布时间:2020-10-01 14:19:56 来源:脚本之家 阅读:104 作者:perfect亮 本文实例讲述了Java简单实现约瑟夫环算法.分享给大家供大家参 ...
- 约瑟夫环算法(JAVA)
约瑟夫环算法(JAVA) 简介:约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3-n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列:他的下一个人又从1 ...
- C语言幸运星课程设计,涉及约瑟夫环算法,多个版本
C语言幸运星课程设计,涉及约瑟夫环算法,多个版本,放于多个分支. 使用及转载请标明出处(最好点个赞及star哈哈) 版本1使用链表,函数传参 版本2使用链表,空参函数,全局变量 版本3使用动态数组 码 ...
- 约瑟夫环 java代码_约瑟夫环算法的Java实现代码
相信大家都知道这是一个的算法问题,约瑟夫环的c语言实现是利用了指针链表的形式,java实现呢,我的这个是用了内部类. 算法描述:n个人围成一圈,每人有一个各不相同的编号,选择一个人作为起点,然后顺时针 ...
- 约瑟夫环算法问题(C++)
约瑟夫环算法问题 什么是约瑟夫环 约瑟夫环算法题 什么是约瑟夫环 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知 n 个人(以编号1,2,3-n分别表示)围坐在一张圆桌周围.从编号为 k 的人开始报 ...
- 一文读懂约瑟夫环算法
2020-05-25 20:13:40 作者 | 扬帆向海 责编 | 王晓曼 出品 | CSDN博客 问题描述 约瑟夫问题(有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题.在计算机编程的 ...
- 一文读懂约瑟夫环算法 | 原力计划
作者 | 扬帆向海 责编 | 王晓曼 出品 | CSDN博客 问题描述 约瑟夫问题(有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题.在计算机编程的算法中,类似问题又称为约瑟夫环.又称&q ...
- python约瑟夫环算法和流程图_约瑟夫环问题及python与c++实现效率对比
约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重 ...
- 约瑟夫环算法c语言,约瑟夫环的c语言实现(代码已实现)
# include #define MAXLEN 20 int front=MAXLEN-1;//队列初始化 int rear=MAXLEN-1; enqueue(int q[],int x) //入 ...
- python猴子选大王讲解_python 【猴子选大王】算法示例
对python这个高级语言感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧! 今天来实现一个约瑟夫环算法,下面是一道新浪的面试题: m只猴子围坐成一个圈,按顺时针方向从1到m编 ...
最新文章
- 关于Ubuntu下面的 完全删除卸载说明
- 正则表达式的简单理解
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(四) Logging Application Block
- 021-PHP常用的数值类型判断函数
- CSS 魔法:学海无涯,而吾生有涯
- 《编码规范和测试方法——C/C++版》作业 ·008——编写一个符合依赖倒置原则的简单学生管理系统
- Aggregate 为字符串数组元素添加单引号 可用于SQL数据查询 in
- redis hash field过期时间_Redis系列-Redis数据类型
- mysql tee_MySQL 使用tee记录语句和输出日志
- JavaSE学习脑图
- Mac安装Lingo
- 数学建模方法自己归纳总结(建模参考用,包含相应例题以及MATLAB代码)
- MATLAB:快速傅里叶变换(FFT)
- 迅为iTOP-IMX6ULL开发板Pinctrl和GPIO子系统实验-修改设备树文件
- 键盘锁定了,无法输入是什么原因?
- macOS Big Sur 11.4 (20F71) 正式版(DMG、ISO、IPSW),百度网盘下载
- Docker Harbor——拥有独特UI界面的私有仓库
- Roofline-on-NVIDIA-GPUs代码分析
- node.js 模块的安装卸载与导入机制
- #四、股市操作方法大道可否至简?