package test;/*** @time 2019年12月19日上午9:55:59* @author lll* @describe 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈* 。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,* 继续0...m-1报数....这样下去....直到剩下最后一个小朋友,可以不用表演,并且拿到牛客名贵的“名侦探柯南”典藏版(名额有限哦!!^_^)。请你试着想下,* 哪个小朋友会得到这份礼品呢?(注:小朋友的编号是从0到n-1)*/
public class OutGame2 {/** Param: n是总人数 m是报数的数*/public static int LastRemaining_Solution(int n, int m) {// 固定人数不变int Num = n;// 游标int key = 0;// 结果int result = -1;// 初始化数组代表人是否已经剔除Boolean[] arr = new Boolean[n];for (int i = 0; i < arr.length; i++) {arr[i] = true;}while (n > 1) {for (int i = 0; i < Num; i++) {// 当报数等于m时,报数人下场if (key == m - 1 && arr[i]) {n--;key = 0;arr[i] = false;System.out.println(i);} else {// 否则进入下一个人if (arr[i]) {key++;}}// 当报数大于人总数时循环进行if (i == Num - 1 && i < m && n > 1) {i = -1;}}}// 寻找结果for (int i = 0; i < arr.length; i++) {if (arr[i]) {result = i;break;} else {result = -1;}}return result;}public static void main(String[] args) {// 调用测试System.out.println("jieguo:" + LastRemaining_Solution(0, 0));;}}
本文发布于:2024-02-04 14:07:09,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170708922756218.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |