一群猴子要选新猴王。新猴王的选择方法是:让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时杀掉那个人,最终胜利者的编号


绿色为数组下标
黄色为最后所找到的“王”
整张图可以看成一串数不断往左移

猴子问题----约瑟夫环算法相关推荐

  1. java实现约瑟夫环完整算法_Java简单实现约瑟夫环算法示例

    Java简单实现约瑟夫环算法示例 发布时间:2020-10-01 14:19:56 来源:脚本之家 阅读:104 作者:perfect亮 本文实例讲述了Java简单实现约瑟夫环算法.分享给大家供大家参 ...

  2. 约瑟夫环算法(JAVA)

    约瑟夫环算法(JAVA) 简介:约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3-n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列:他的下一个人又从1 ...

  3. C语言幸运星课程设计,涉及约瑟夫环算法,多个版本

    C语言幸运星课程设计,涉及约瑟夫环算法,多个版本,放于多个分支. 使用及转载请标明出处(最好点个赞及star哈哈) 版本1使用链表,函数传参 版本2使用链表,空参函数,全局变量 版本3使用动态数组 码 ...

  4. 约瑟夫环 java代码_约瑟夫环算法的Java实现代码

    相信大家都知道这是一个的算法问题,约瑟夫环的c语言实现是利用了指针链表的形式,java实现呢,我的这个是用了内部类. 算法描述:n个人围成一圈,每人有一个各不相同的编号,选择一个人作为起点,然后顺时针 ...

  5. 约瑟夫环算法问题(C++)

    约瑟夫环算法问题 什么是约瑟夫环 约瑟夫环算法题 什么是约瑟夫环 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知 n 个人(以编号1,2,3-n分别表示)围坐在一张圆桌周围.从编号为 k 的人开始报 ...

  6. 一文读懂约瑟夫环算法

    2020-05-25 20:13:40 作者 | 扬帆向海 责编 | 王晓曼 出品 | CSDN博客 问题描述 约瑟夫问题(有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题.在计算机编程的 ...

  7. 一文读懂约瑟夫环算法 | 原力计划

    作者 | 扬帆向海 责编 | 王晓曼 出品 | CSDN博客 问题描述 约瑟夫问题(有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题.在计算机编程的算法中,类似问题又称为约瑟夫环.又称&q ...

  8. python约瑟夫环算法和流程图_约瑟夫环问题及python与c++实现效率对比

    约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重 ...

  9. 约瑟夫环算法c语言,约瑟夫环的c语言实现(代码已实现)

    # include #define MAXLEN 20 int front=MAXLEN-1;//队列初始化 int rear=MAXLEN-1; enqueue(int q[],int x) //入 ...

  10. python猴子选大王讲解_python 【猴子选大王】算法示例

    对python这个高级语言感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧! 今天来实现一个约瑟夫环算法,下面是一道新浪的面试题: m只猴子围坐成一个圈,按顺时针方向从1到m编 ...

最新文章

  1. 关于Ubuntu下面的 完全删除卸载说明
  2. 正则表达式的简单理解
  3. 黄聪:Microsoft Enterprise Library 5.0 系列教程(四) Logging Application Block
  4. 021-PHP常用的数值类型判断函数
  5. CSS 魔法:学海无涯,而吾生有涯
  6. 《编码规范和测试方法——C/C++版》作业 ·008——编写一个符合依赖倒置原则的简单学生管理系统
  7. Aggregate 为字符串数组元素添加单引号 可用于SQL数据查询 in
  8. redis hash field过期时间_Redis系列-Redis数据类型
  9. mysql tee_MySQL 使用tee记录语句和输出日志
  10. JavaSE学习脑图
  11. Mac安装Lingo
  12. 数学建模方法自己归纳总结(建模参考用,包含相应例题以及MATLAB代码)
  13. MATLAB:快速傅里叶变换(FFT)
  14. 迅为iTOP-IMX6ULL开发板Pinctrl和GPIO子系统实验-修改设备树文件
  15. 键盘锁定了,无法输入是什么原因?
  16. macOS Big Sur 11.4 (20F71) 正式版(DMG、ISO、IPSW),百度网盘下载
  17. Docker Harbor——拥有独特UI界面的私有仓库
  18. Roofline-on-NVIDIA-GPUs代码分析
  19. node.js 模块的安装卸载与导入机制
  20. #四、股市操作方法大道可否至简?

热门文章

  1. Namesilo更换域名DNS解析服务器的方法
  2. 人工智能 - 虚拟人 - 2D/3D 动作捕捉
  3. 详细的568A和568B线序
  4. 2016.09.20回顾
  5. SublimeText3 搭建 C++ Python
  6. eNSP华为路由器与交换机连接
  7. 脑电数据处理分析教程汇总(eeglab, mne-python)
  8. window远程桌面无法复制粘贴文件到本地
  9. 八猴渲染器4.0基本使用教程及渲染教程
  10. rocketMq配置外网IP