题目描述

每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0...m-1报数....这样下去....直到剩下最后一个小朋友,可以不用表演,并且拿到牛客名贵的“名侦探柯南”典藏版(名额有限哦!!^_^)。请你试着想下,哪个小朋友会得到这份礼品呢?(注:小朋友的编号是从0到n-1)

思路:

我们知道第一个人(编号一定是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

我的座右铭:不会,我可以学;落后,我可以追赶;跌倒,我可以站起来;我一定行。

编程题:孩子们的游戏(圆圈中的最后剩下的数)相关推荐

  1. 孩子们的游戏(圆圈中最后剩下的数)

    题目:孩子们的游戏(圆圈中最后剩下的数) 题目描述 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为牛客的资深元老,自然也准备了一些小游戏.其中,有个游戏是这样的:首 ...

  2. 46. 孩子们的游戏-圆圈中最后剩下的数字

    题目描述: 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为牛客的资深元老,自然也准备了一些小游戏.其中,有个游戏是这样的:首先,让小朋友们围成一个大圈.然后,他随机 ...

  3. java输出带圆圈数字_java实现孩子们的游戏(圆圈中最后剩下的数)

    题目描述 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为牛客的资深元老,自然也准备了一些小游戏.其中,有个游戏是这样的:首先,让小朋友们围成一个大圈.然后,他随机指 ...

  4. 剑指offer:孩子们的游戏(圆圈中最后剩下的数)

    题目描述 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为牛客的资深元老,自然也准备了一些小游戏.其中,有个游戏是这样的:首先,让小朋友们围成一个大圈.然后,他随机指 ...

  5. java名侦探柯南游戏大全_孩子们的游戏(圆圈中最后剩下的数),Java代码实现思路分享...

    下面给大家分享的是一个Java代码实例,下面一起来了解一下吧. 抽象建模能力 题目: 让小朋友们围成一个大圈,之后,随机指定一个数m,让编号为0的小朋友开始报数. 每一次,喊到了m-1的那个小朋友要出 ...

  6. 程序员面试题精选100题(14)-圆圈中最后剩下的数字[算法]

    题目:n个数字(0,1,-,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字).当一个数字删除后,从被删除数字的下一个继续删除第m ...

  7. 【强烈推荐】《剑指Offer:名企面试官精讲典型编程题》一书中IT名企经典面试题

    各位程序猿: <剑指Offer> 一书源自该书作者何海涛坚持更新与编写的博客( http://zhedahht.blog.163.com/ ),该博客收集整理了大量如微软.Google等知 ...

  8. 何海涛——《剑指Offer:名企面试官精讲典型编程题》一书中IT名企经典面试题

    <剑指Offer> 一书源自该书作者何海涛坚持更新与编写的博客( http://zhedahht.blog.163.com/ ),该博客收集整理了大量如微软.Google等知名IT企业的经 ...

  9. javaee编程题_在JavaEE中使用CDI的简单面向方面的编程(AOP)

    javaee编程题 我们编写满足特定业务逻辑的服务API. 涵盖所有服务API(如安全性,日志记录,审核,度量延迟等)的跨领域问题很少. 这是一个重复的非业务代码,可以在其他方法之间重用. 重用的一种 ...

最新文章

  1. gulp前端自动化工具的快速入门案例
  2. 虚拟化基础架构Windows 2008篇之12-WSUS工作站端配置
  3. C/C++中 static 的作用
  4. excel 避免下拉操作
  5. 爱了!华为nova 5细节曝光:外观配置堪比Mate 20 Pro
  6. 如何获得Android设备名称(ADB命令详细介绍)
  7. matlab画图不显示中文_[过时] [LaTeX 使用] 升级 macOS 10.15 后 ctex 文档不显示中文的临时方案...
  8. 浅谈iOS中的蓝牙技术(二) CoreBluetooth
  9. 算法---贪心算法典型案例
  10. c语言循环语句解鸡兔同笼,JavaScript的for循环语句练习之解决鸡兔同笼问题
  11. 三维点云处理技术二:三维点云表征概述
  12. VMWare Workstation 使用UEFI启动
  13. 一般python程序员的工资_【Python程序员工资|Python程序员待遇怎么样】-看准网
  14. Windows系统安装失败日志分析
  15. 申请高德地图开发key
  16. ASIC开发流程介绍
  17. 生存分析(Survival Analysis)、Cox风险比例回归模型(Cox proportional hazards model)及
  18. 计算机中职作文,中职作文题目
  19. PMP(第六版)中的合同总结
  20. 深度学习训练经验之迭代次数与准确率之惑

热门文章

  1. 心情像天气一样郁闷!
  2. 微信小程序开发文本框无法输入文字
  3. 如何用短信营销打动客户
  4. 蓝桥杯python算法提高真题——幸运顾客
  5. android开发使用苹果还是,用专业的眼光对比安卓和苹果(转)
  6. 手把手教学生成听小说
  7. CF round280
  8. Java抽象类(基础详解)
  9. php判断安卓还是苹果客户端
  10. 多视图几何 | 相对位姿估计的经典回顾和最新进展!