java小作业(六)

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)+"号");//进行输出结果
					}
				}
			}
		}
		
		
		
		
		
	}

}

猜你喜欢

转载自blog.csdn.net/qq_40923411/article/details/81263355