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

输入格式:

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

输出格式:

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

输入样例:

11

输出样例:

7

这是一道典型的约瑟夫环问题,建议第一次写这种题先了解一下约瑟夫环,我这里贴一个我觉得特别好的文章约瑟夫环问题递归解法的一点理解_yanweibujian的博客-CSDN博客_约瑟夫环。

代码如下:

版本1:这个是我看其他人写得。用数学方法推导出的,精简到令人发指,这位大佬也没有任何讲解,我想了好久也没想出来这个公式是怎么推出来的,数学苦手。后来又专门看了下约瑟夫环数学解法的博文,才理解的过来。其实就是上面文章中的递归法的思路。

数学解法推导过程:约瑟夫环问题 ( 最简单的数学解法) - 林夕-梦 - 博客园

代码原地址贴在这里:7-28 猴子选大王(20 分)_海角12138的博客-CSDN博客

#include <stdio.h>
int main()
{int m,i,s=0;scanf("%d",&m);for(i=1 ; i<=m ; i++)s = (s+3) % i ;printf("%d\n",s+1);return 0 ;
}

版本2:数组解法,个人认为这种最好理解,也不难写。

#include<stdio.h>
main()
{int n,i=0;int tag=0,out=0;scanf("%d",&n);int a[n];for(i=0;i<n;i++){a[i]=1;}i=0; while(out!=n-1)//一直循环直到剩余猴子数为1,即踢出的数为n-1{if(a[i]==1)//此位置有猴子则报数{tag++;}if(tag==3)//报到3时踢出此猴,报数重置为0,踢出数+1{a[i]=0;tag=0;out++;}i++;if(i==n)//转一圈后从头开始{i=0;}}for(i=0;i<n;i++){if(a[i]==1){printf("%d",i+1);}}return 0;
}

PTA基础题目集 7-28 猴子选大王 (20 分)相关推荐

  1. 7-28 猴子选大王 (20 分)

    猴子选大王 (20 分) 一群猴子要选新猴王.新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号.从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只 ...

  2. 猴子选大王 (20 分)

    7-10 猴子选大王 (20 分) 一群猴子要选新猴王.新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号.从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧 ...

  3. PTA 7-28 猴子选大王 (20 分)-gcc编译器过不了?

    综述: 猴子选大王这道题看着好像挺简单的,但是实际做起来也不容易.猴子的编号从1到N,然后报数,首先面对的第一个问题是怎么存储这些个猴子,我最开始想用链表,因为链表删除数据容易点,而数组要是删除中间的 ...

  4. 7-28 猴子选大王 (20 分),从中学习约瑟夫环

    一群猴子要选新猴王.新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号.从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数.如此不 ...

  5. 7-28 猴子选大王 (20 分) 最易理解的方法

    一群猴子要选新猴王.新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号.从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数.如此不 ...

  6. 中M2019春C入门和进阶练习 7-69 猴子选大王 (20 分)

    一群猴子要选新猴王.新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号.从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数.如此不 ...

  7. 猴子选大王 java,PAT-JAVA-5-28 猴子选大王 (20分)

    F(1)=0 当有2个人的时候(N=2),报道(M-1)的人自杀,最后自杀的人是谁?应该是在只有一个人时,报数时得到的最后自杀的序号加上M,因为报到M-1的人已经自杀,只剩下2个人,另一个自杀者就是最 ...

  8. Pta题目集:汽车加油问题 (20 分)

    7-40 汽车加油问题 (20 分) 题目来源:王晓东<算法设计与分析> 一辆汽车加满油后可行驶 n公里.旅途中有若干个加油站.设计一个有效算法,指出应 在哪些加油站停靠加油,使沿途加油次 ...

  9. PTA基础题目集 7-25 念数字 (15 分)

    输入一个整数,输出每个数字对应的拼音.当整数为负数时,先输出fu字.十个数字对应的拼音如下: 0: ling 1: yi 2: er 3: san 4: si 5: wu 6: liu 7: qi 8 ...

最新文章

  1. IO流中文件和文件夹的删除程序举例
  2. boost::copy_graph用法的测试程序
  3. Magicodes.IE.AspNetCore之一行代码多格式导出
  4. 简单的Java SSH客户端
  5. ieee39节点系统介绍_Java秒杀系统实战系列-基于ZooKeeper的分布式锁优化秒杀逻辑...
  6. (27)XILINX FPGA bit文件转换成MCS文件(FPGA不积跬步101)
  7. 20190816:(leetcode习题)有效的数独
  8. STL中vector介绍
  9. Python连接SQLite
  10. 毫米波雷达探测应用,智能人体感应雷达,家居雷达方案新体验
  11. haswell主板linux驱动下载,Haswell核芯显卡驱动首版已发布,附下载地址
  12. LABVIEW详细介绍:LABVIEW是什么软件?都可以干什么?
  13. python每日一记目标
  14. BIOS设置中的启动引导模式以及SATA的三种模式
  15. 英语自然拼读:字母A的常见几种发音
  16. 如何在Mac电脑中使用键盘移动操作鼠标焦点?如何在Mac中打开辅助键盘?
  17. 带疑问的歌词有哪些_带有(我)字的歌词有哪些
  18. WORD文档中插入图片(1)
  19. SSIS学习(一) - SSIS入门
  20. 手把手教你如何用PS抠白底图教程

热门文章

  1. asp.net企业员工考勤管理系统
  2. LeetCode题目——二叉树篇
  3. c语言用命令语句让电脑关机
  4. Kotlin协程不可用(java.lang.IllegalStateException: Module with the Main dispatcher is missing)另一种可能原因
  5. 详解TCP连接的释放
  6. Nginx 符合域名跳转
  7. [多核并行计算]进程间通信(三)套接字
  8. mysql 转为小写_mysql将字符串转成小写的方法
  9. 电话招生技巧开场白---转载 (二)
  10. MySQL数据库——四大约束(Constraint)