今天同学们相约一起爬山游玩, 为了更好的进行这场活动, 大家准备推举一个人作为出游的临时队长。为了体现合理公平, 大家提出了一个比较有趣的规则。 所有人围成一圈, 顺序排号。 从第一个人开始报数(从 1 到 3 报数),凡报到 3 的人退出圈子, 剩下的人继续报数, 最后留下的当选为队长。请你通过编写程序, 求出一组人中的队长是原来第几位同学。
package day01_text1;
import java.util.Scanner;
public class demo03 {
/*今天同学们相约一起爬山游玩, 为了更好的进行这场活动,
* 大家准备推举一个人作为出游的临时队长。为了体现合理公平,
* 大家提出了一个比较有趣的规则。 所有人围成一圈顺序排号。
* 从第一个人开始报数(从 1 到 3 报数),凡报到 3 的人退出圈子,
* 剩下的人继续报数, 最后留下的当选为队长。请你通过编写程序,
* 求出一组人中的队长是原来第几位同学。
*/
public static void main(String[] args) {
Scanner input =new Scanner(System.in);
System.out.println("请输入爬山总人数");
int zongRenShu=input.nextInt();
int[] renShu=new int[zongRenShu];//创建一个数组用来记录总人数
for(int i=0;i<renShu.length;i++) {
renShu[i]=i+1;//因为数组下标是从0开始的,我们得把第一个人置为1,也就是给人编号
}for(int i=0;i<renShu.length;i++) {
System.out.print(renShu[i]+"\t");//打印编好的人出来,此处不换行
}
/*下面开始游戏,但循环的次数不是固定的,所以我们用while
* 创建一个变量作为while判断依据
*/
int sum =zongRenShu;//记录还剩多少人,游戏还没开始,所以赋值为初始输入的值
int num =0;//从0开始报数;
System.out.print("\n"+"出局顺序为:");//换行哈
while(sum>1) {
for(int i=0;i<renShu.length;i++) {
if(renShu[i]!=-1) {
num++;//现在开始报数啦,注意:这个if不能放在下面这个if的后面哦
}
if(num==3) {
System.out.print(renShu[i]+"\t");//打印出局顺序并对齐
renShu[i]=-1;//当报到3的时候,就把这个人的值置为-1
sum--;//-1代表出局了,总游戏人数就要-1
num=0;//每当报到3的时候就又要重新开始报,所以又把他置为0
}
}
}
//游戏结束,打印最后的队长
for(int i=0;i<renShu.length;i++) {
if(renShu[i]!=-1) {//不等于-1就打印出来
System.out.print("\n"+"最后的队长是:"+renShu[i]);//前面没换行,这里要换行哟
}
}
}
}
代码执行截图: