1.有n个人围成一圈,顺序排号,从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位
package com.sj.workplus;
import java.util.Scanner;
/**
* @desc 有n个人围成一圈,顺序排号,从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位
* @author ws
* @time 7.28
*/
public class B {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);//控制台输入类
System.out.print("请输入总人数:");
int n = cin.nextInt();//输入总人数n
boolean []taf = new boolean[n];//声明进行排除的布尔类型的数组,进行编号和淘汰和留下的判断
for (int i = 0; i < taf.length; i++) {//默认全是flase,全部修改成true,想表明:true为留下的人,flase为淘汰的人
taf[i]=true;
}
int countNum = 1;//声明报数的数字
int stayN = n;//声明留下来的人数,默认为n个人
while (stayN>1) {//创建循环,stayN=1时停止循环
for (int i = 0; i < taf.length; i++,countNum++) {//countNum是报的数
//开始进行报数
if (taf[i]==false) {//如果淘汰
countNum--;//幻想这个人报上个人报的数,方便进行循环
}
if (countNum==3) {//如果报数为3
taf[i]=false;//淘汰此人
countNum=0;//下一轮countNum=1,进行循环
stayN--;//留下来的人-1
}
}
if (stayN==1) {//最后留下一个人时
for (int j = 0; j < taf.length; j++) {//循环查找人
if (taf[j]==true) {//留下的人
System.out.println("最后留下的人是: "+(j+1)+"号");//进行输出结果
}
}
}
}
}
}