首页 > 其他分享 >JZ62 孩子们的游戏(圆圈中最后剩下的数)

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

时间:2022-12-27 11:58:03浏览次数:56  
标签:游戏 int ++ 圆圈 num child JZ62 小朋友

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

题目

每年六一儿童节,牛客都会准备一些小礼物和小游戏去看望孤儿院的孩子们。
其中,有个游戏是这样的:首先,让 n 个小朋友们围成一个大圈,小朋友们的编号是0~n-1。
然后,随机指定一个数m,让编号为0的小朋友开始报数。每次喊到 m-1 的那个小朋友要出列唱首歌,
然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,
继续0... m-1报数....这样下去....直到剩下最后一个小朋友,可以不用表演,并且拿到牛客礼品,请你试着想下,
哪个小朋友会得到这份礼品呢?

方法1 暴力算法

思路

算法实现

用数组模拟循环列表,从0开始喊到m个数后,就将其值置为-1。直到数组剩下最后一个数(非-1)。

代码

package mid.JZ62孩子们的游戏;

import java.util.ArrayList;

public class Solution {
    public int LastRemaining_Solution(int n, int m) {
        if (m == 0) return -1;

        int num = 0, k = 0;
        int[] child = new int[n];

        for (int i = 0; k != n - 1; i = (++i) % n) {//i=(++i) % n这里是一个特殊操作,使遍历自动再数组内循环。
            if (child[i] == 0) {
                num++;
                if (num == m) {
                    num = 0;
                    child[i] = 1;
                    k++;
                }//此位置小孩退圈
            }
        }
        for (int i = 0; i < child.length; i++) {
            if (child[i] == 0) {
                return i;
            }
        }
        return -1;
    }
}

方法2 约瑟夫问题递推公式

思路

算法实现
利用约瑟夫问题的递推公式 f(n,m) = ( f(n-1,m) +m)%n )
重新编号之前 m, m+1,m+2,....重新编号之后 0 ,1 ,2,....

代码

package mid.JZ62孩子们的游戏;

import java.util.ArrayList;

public class Solution {
    public int LastRemaining_Solution(int n, int m) {
            if(n <= 0) return -1;
            return (LastRemaining_Solution(n-1,m)+m)%n;
        }
}

标签:游戏,int,++,圆圈,num,child,JZ62,小朋友
From: https://www.cnblogs.com/loongnuts/p/17007738.html

相关文章

  • Web前端--HTML+Canvas+Js实现3D魔方小游戏
    一、案列效果二、案列思路1、先将平面上的6个DIV拼接在一起。形成一张类似于3d立方体图形展开的平面图。 2、我们需要将每一个面旋转到相应的位置上,每一个面的旋转轴都是不......
  • Web前端--HTML+Canvas+Js实现3D魔方小游戏
    一、案列效果二、案例思路1、先将平面上的6个DIV拼接在一起。形成一张类似于3d立方体图形展开的平面图。 2、我们需要将每一个面旋转到相应的位置上,每一个面的旋转......
  • 【Unity3D 官方移动游戏优化指南】12.物理
    Unity的内置物理系统(NvidiaPhysX)在移动设备上开销较大。下面的提示可以帮助您每秒减少更多帧。优化设置在PlayerSettings中,尽可能选中 PrebakeCollisionMeshes。......
  • Android游戏开发cocos2d-x调用Java层代码
    通过JNI调用准备工作:首先用VS工程导入$cocos2d_Root\cocos2dx\platform\android\jni\JniHelper.h接着导入$Java\jdk1.6.0_10\include\jni.h再导入$Java\jdk1.6.0_10\include......
  • vivo 游戏中心低代码平台的提效秘诀
    作者:vivo互联网服务器团队-ChenWenyang本文根据陈文洋老师在“2022vivo开发者大会"现场演讲内容整理而成。可关注“vivo互联网技术”获取相关资料与信息在互联网流量见......
  • vivo 游戏中心低代码平台的提效秘诀
    作者:vivo互联网服务器团队-ChenWenyang本文根据陈文洋老师在“2022vivo开发者大会"现场演讲内容整理而成。公众号回复【2022VDC】获取互联网技术分会场议题相关资......
  • 大佬爆肝数月做的游戏辅助器-原神助手,用过都说好!
     这是一款开源的游戏辅助工具——原神助手。支持原神签到、祈愿抽卡分析、查看便签状态和游戏详细数据等。开发者自述也是偶然间接触到《原神》,于是一发不可收拾,爱上这......
  • 西宁海东游戏网站高防BGP物理机
    更加轻松地找出问题所在,便于运维人员的维护,而如果是IP数较少,对应网站较多,则排除的难度将大大增加。美国作为世界上网络技术较为成熟的国家,除了网络拥有大带宽的优势外,对于......
  • 西宁海东游戏网站高防物理机租用
    一般而言,在一个IP地址上面只放置一个网址,该网址的权重将高于多个网址同放在一个IP地址上,所以当站长建设站群时,拥有充足的IP数去满足多个网址的放置,使每个网站都拥有独立IP,......
  • 教你用JavaScript实现乘法游戏
    案例介绍欢迎来的我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用JavaScript编程实战案例,做一个乘法积分游戏。乘法游戏主要通过用户输入的数值和程序计算的数......