Java_有n个人围成一圈,顺序排号,从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号

package cn.myAlgorithm;

/**
 * 
* 

Title: NumOff123

*

Description: * 有n个人围成一圈,顺序排号。 从第一个人开始报数(从1到3报数),凡报到3的人退出圈子, 问最后留下的是原来第几号的那位 *

* @author Chill Lyn * @date 2019年9月17日 */
class NumOff123 { /** * *

Title: numAlive

*

Description:

* @param playerNum 玩家人数 * @param deadNum 死亡数字 * @return */
public static int numAlive(int playerNum, int deadNum) { // 每个人初始状态为true,表示存活 boolean[] arr = new boolean[playerNum]; for (int i = 0; i < playerNum; i++) { arr[i] = true; } int leftNum = playerNum;// 剩余人数 int count = 0;// 报数值 int index = 0;// 报数者索引 //当剩余玩家人数>1时 while (leftNum > 1) { //存活,报数+1 if (arr[index]) { count++; } //报到死亡数字,置死,存活人数-1,重新报数 if (count == deadNum) { arr[index] = false; leftNum--; count = 0; } //不管任何条件下,玩家索引+1 index++; //索引等于玩家总人数时,开启新一轮 if (index == playerNum) { index = 0; } } //遍历寻找唯一存活玩家 for (int i = 0; i < playerNum; i++) { if (arr[i]) { return i + 1; } } return -1; } public static void main(String[] args) { System.out.println(numAlive(5, 3)); } }

结果
4

你可能感兴趣的:(Java_基础,算法)