标号1-n的n个人首尾相接,1到3报数,报到3的退出,求最后一个人的标号
Posted duosl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了标号1-n的n个人首尾相接,1到3报数,报到3的退出,求最后一个人的标号相关的知识,希望对你有一定的参考价值。
标号1-n的n个人首尾相接,1到3报数,报到3的退出,求最后一个人的标号
public static void lastPerson(int n){
if (n < 1){
throw new IllegalArgumentException("人数不能小于0");
}else {
int[] persons = new int[n + 1];
int num = 0; //模拟报数 1~3
int dead = 0; //退出人数
//给每个人进行标号,以便获取最后留下那个人的编号
for (int i = 1; i <= n; i++) {
persons[i] = i;
}
for (int i = 1; ; i++) {
if (i > n) { //如果i>n; 重新开始 i=1;
i = 1; //等价于 i=1
}
if (persons[i] != 0) { //如果这个人没有退出,则报数
num++;
}
if (num == 3 && dead != n - 1) { //如果退出人数不等于或者说小于n-1, 则表示游戏未结束
num = 0; //num重置
persons[i] = 0; //表示此人退出
dead++; //退出人数+1
} else if (dead == n - 1) { //只剩下最后一人,表示此人是幸存者
System.out.println("幸存者编号为:" + i);
break;
}
}
以上是关于标号1-n的n个人首尾相接,1到3报数,报到3的退出,求最后一个人的标号的主要内容,如果未能解决你的问题,请参考以下文章
经典笔试题:标号1-n的n个人首尾相接,1到3报数,报到3的退出,求最后一个人的标号
有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位
java例题_37 有 n 个人围成一圈,顺序排号。从第一个人开始报数(从 1 到 3 报数),凡报到 3 的人退出圈子, 3 问最后留下的是原来第几号的那位。