java-选队长小游戏
功能描述
今天同学们相约一起爬山游玩,为了更好的进行这场活动,大家准备推举一个人作为出游的临时队长。为了体现合理公平,大家提出了一个比较有趣的规则。所有人围成一圈,顺序排号。从第一个人开始报数(从 1 到 3 报数),凡报到 3 的人退出圈子,剩下的人继续报数,最后留下的当选为队长
代码实现
1 public static void main(String[] args) { 2 // 创建扫描对象,接收小队人数 3 Scanner scanner = new Scanner(System.in); 4 System.out.println("请输入人数:"); 5 int num = scanner.nextInt(); 6 //根据人数创建数组 7 int[] members = new int[num]; 8 //先给人员编号,1.2.....num。这里也可以不赋值,最后根据下标确定编号。 9 for (int i = 0; i < num; i++) { 10 members[i] = i + 1; 11 } 12 System.out.println(Arrays.toString(members)); 13 //创建对象:报数内容,初始是1 14 int count = 1; 15 //创建对象:备选队长人数初始化num 16 int alternativeCaptainNum = num; 17 A:while (true) { 18 //遍历全部成员 19 for (int i = 0; i < num; i++) { 20 //先判断成员编号是否是-1,如果是-1,说明已经落选了 21 if(members[i] != -1) { 22 System.out.println( members[i]+"报数 : "+count); 23 //没有落选,报数加1; 24 count++; 25 } 26 //因为上面加了1,所以这里用4判断 27 if (count == 4) { 28 System.out.println(members[i]+"您落选了! "); 29 //如果等于4,报数到3了,下个人要从1开始报数 30 count = 1; 31 //给成员赋值为-1,用于判断是落选了。 32 members[i] = -1; 33 //备选队长人数少1 34 alternativeCaptainNum--; 35 } 36 //就剩一个人了,结束循环;这里可以在for循环外部判断,跳出while循环。这里判断好处是可以快速结束for循环,后面的-1不用判断报数了。 37 if(alternativeCaptainNum == 1 ) { 38 break A; 39 } 40 } 41 } 42 System.out.println(Arrays.toString(members)); 43 //遍历最终数据,查找编号部署-1的人 44 for(int i = 0; i < num; i++) { 45 if(members[i] != -1) { 46 System.out.println("最终队长是: "+members[i]); 47 break; 48 } 49 } 50 }
代码测试
请输入人数: 8 [1, 2, 3, 4, 5, 6, 7, 8] 1报数 : 1 2报数 : 2 3报数 : 3 3您落选了! 4报数 : 1 5报数 : 2 6报数 : 3 6您落选了! 7报数 : 1 8报数 : 2 1报数 : 3 1您落选了! 2报数 : 1 4报数 : 2 5报数 : 3 5您落选了! 7报数 : 1 8报数 : 2 2报数 : 3 2您落选了! 4报数 : 1 7报数 : 2 8报数 : 3 8您落选了! 4报数 : 1 7报数 : 2 4报数 : 3 4您落选了! [-1, -1, -1, -1, -1, -1, 7, -1] 最终队长是: 7