编程题:孩子们的游戏(圆圈中的最后剩下的数)
题目描述
思路:
我们知道第一个人(编号一定是m%n-1) 出列之后,剩下的n-1个人组成了一个新的约瑟夫环(以编号为k=m%n的人开始):
k k+1 k+2 ... n-2, n-1, 0, 1, 2, ... k-2并且从k开始报0。
现在我们把他们的编号做一下转换:
k --> 0
k+1 --> 1
k+2 --> 2
...
...
k-2 --> n-2
k-1 --> n-1
变换后就完完全全成为了(n-1)个人报数的子问题,假如我们知道这个子问题的解: 例如x是最终的胜利者,那么根据上面这个表把这个x变回去不刚好就是n个人情 况的解吗?!!变回去的公式很简单,相信大家都可以推出来:x'=(x+k)%n。
令f[i]表示i个人玩游戏报m退出最后胜利者的编号,最后的结果自然是f[n]。
递推公式
f[1]=0;
f[i]=(f[i-1]+m)%i; (i>1)
代码:
import java.util.Scanner; /** * Created by ASUS on 2018/6/14 * * @Authod Grey Wolf */ public class Practice {public static void main(String[] args) {Practice practice=new Practice(); practice.sys(); }private void sys() {Scanner scanner=new Scanner(System.in); int n=scanner.nextInt(); int m=scanner.nextInt(); int res=getRes(n,m); System.out.println(res); }private int getRes(int n, int m) {if (n==0) {return -1; }//小朋友的编号是从0到n-1 if (n==1) {return 0; }return (getRes(n-1,m)+m)%n; } }
效果:
5 3
3
我的座右铭:不会,我可以学;落后,我可以追赶;跌倒,我可以站起来;我一定行。
编程题:孩子们的游戏(圆圈中的最后剩下的数)相关推荐
- 孩子们的游戏(圆圈中最后剩下的数)
题目:孩子们的游戏(圆圈中最后剩下的数) 题目描述 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为牛客的资深元老,自然也准备了一些小游戏.其中,有个游戏是这样的:首 ...
- 46. 孩子们的游戏-圆圈中最后剩下的数字
题目描述: 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为牛客的资深元老,自然也准备了一些小游戏.其中,有个游戏是这样的:首先,让小朋友们围成一个大圈.然后,他随机 ...
- java输出带圆圈数字_java实现孩子们的游戏(圆圈中最后剩下的数)
题目描述 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为牛客的资深元老,自然也准备了一些小游戏.其中,有个游戏是这样的:首先,让小朋友们围成一个大圈.然后,他随机指 ...
- 剑指offer:孩子们的游戏(圆圈中最后剩下的数)
题目描述 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为牛客的资深元老,自然也准备了一些小游戏.其中,有个游戏是这样的:首先,让小朋友们围成一个大圈.然后,他随机指 ...
- java名侦探柯南游戏大全_孩子们的游戏(圆圈中最后剩下的数),Java代码实现思路分享...
下面给大家分享的是一个Java代码实例,下面一起来了解一下吧. 抽象建模能力 题目: 让小朋友们围成一个大圈,之后,随机指定一个数m,让编号为0的小朋友开始报数. 每一次,喊到了m-1的那个小朋友要出 ...
- 程序员面试题精选100题(14)-圆圈中最后剩下的数字[算法]
题目:n个数字(0,1,-,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字).当一个数字删除后,从被删除数字的下一个继续删除第m ...
- 【强烈推荐】《剑指Offer:名企面试官精讲典型编程题》一书中IT名企经典面试题
各位程序猿: <剑指Offer> 一书源自该书作者何海涛坚持更新与编写的博客( http://zhedahht.blog.163.com/ ),该博客收集整理了大量如微软.Google等知 ...
- 何海涛——《剑指Offer:名企面试官精讲典型编程题》一书中IT名企经典面试题
<剑指Offer> 一书源自该书作者何海涛坚持更新与编写的博客( http://zhedahht.blog.163.com/ ),该博客收集整理了大量如微软.Google等知名IT企业的经 ...
- javaee编程题_在JavaEE中使用CDI的简单面向方面的编程(AOP)
javaee编程题 我们编写满足特定业务逻辑的服务API. 涵盖所有服务API(如安全性,日志记录,审核,度量延迟等)的跨领域问题很少. 这是一个重复的非业务代码,可以在其他方法之间重用. 重用的一种 ...
最新文章
- gulp前端自动化工具的快速入门案例
- 虚拟化基础架构Windows 2008篇之12-WSUS工作站端配置
- C/C++中 static 的作用
- excel 避免下拉操作
- 爱了!华为nova 5细节曝光:外观配置堪比Mate 20 Pro
- 如何获得Android设备名称(ADB命令详细介绍)
- matlab画图不显示中文_[过时] [LaTeX 使用] 升级 macOS 10.15 后 ctex 文档不显示中文的临时方案...
- 浅谈iOS中的蓝牙技术(二) CoreBluetooth
- 算法---贪心算法典型案例
- c语言循环语句解鸡兔同笼,JavaScript的for循环语句练习之解决鸡兔同笼问题
- 三维点云处理技术二:三维点云表征概述
- VMWare Workstation 使用UEFI启动
- 一般python程序员的工资_【Python程序员工资|Python程序员待遇怎么样】-看准网
- Windows系统安装失败日志分析
- 申请高德地图开发key
- ASIC开发流程介绍
- 生存分析(Survival Analysis)、Cox风险比例回归模型(Cox proportional hazards model)及
- 计算机中职作文,中职作文题目
- PMP(第六版)中的合同总结
- 深度学习训练经验之迭代次数与准确率之惑