今天同学们相约一起爬山游玩,为了更好的进行这场活动,大家准备推举 一个人作为出游的临时队长。为了体现合理公平,大家提出了一个比较有趣的 规则。所有人围成一圈,顺序排号。从第一个人开始报数(从 1 到 3 报数), 凡报到 3 的人退出圈子,剩下的人继续报数,最后留下的当选为队长。 请你通过编写程序,求出一组人中的队长是原来第几位同学。
解析:
1.用while循环来表示圆形队列,设定一个数组代表该队
2.设定一个数,使数组值都不为该值,如果不等于值则表明没有被淘汰
3.计数1-3用变量表示,前面有一个0把循环3-1接起来
4.记录一个被淘汰的数,达到总人数少一的时候结束
import java.util.Scanner;
public class BaoShu {
public static void main(String[] args) {
System.out.println("请输入总共人数:");
Scanner input=new Scanner(System.in);
while (!input.hasNextInt()){
System.out.println("输入错误,请重新输入:");
input=new Scanner(System.in);
}
Integer i=input.nextInt();
while(i<=0){
Scanner in=new Scanner(System.in);
System.out.println("输入错误,请重新输入:");
i=in.nextInt();
}
System.out.println("第一个人报数:");
Scanner in=new Scanner(System.in);
while (!in.hasNextInt()){
System.out.println("输入错误,请重新输入:");
in=new Scanner(System.in);
}
Integer j=in.nextInt();
while(j<=0||j>3){
Scanner g=new Scanner(System.in);
System.out.println("输入错误,请重新输入:");
j=g.nextInt();
}
int[] rengZong=new int[i];
for (int k=0;k<i;k++){
rengZong[k]=k+1;
}
int shu=j-1;
int yu=0;
while(true){
for(int ji=0;ji<rengZong.length;ji++){
if(rengZong[ji]!=0){
shu++;
if(shu==3){
shu=0;
yu++;
rengZong[ji]=0;
}
}
}
if(yu==rengZong.length-1){
break;
}
}
for(int ji=0;ji<rengZong.length;ji++){
if(rengZong[ji]!=0){
System.out.println(rengZong[ji]);
}
}
}
}