现在游戏规则如下:
500个小孩首尾相连拉成一个圆圈,从第0个小孩起,依次报数,每当数到3,该小孩退出圈,下一个小孩接着从1开始报数。如此下去圈中的小孩越来越少,求最后一个小孩是哪一个。
代码采用两种方法解决这个问题。
代码如下:
class Children {
public static void main(String[] args) {
play2();
play1();
}
public static void play1() { //算法一
boolean[] a = new boolean[500]; //false表示在圈子里面
int count = 0; //数数计数器
int pos = 0; //下标计数器
int total = a.length; //人数
while(total != 0) {
if(!a[pos]) count++; //如果小孩在圈内,则数数计数器增加
if(count == 3) { //如果到3
a[pos] = true; //小孩出去
count = 0; //数数技术器归0
total--; //总人数--
}
pos++; //下标右移
pos %= a.length; //处理越界问题
}
System.out.println(--pos == -1? a.length - 1:pos);
}
public static void play2() { //算法2
//初始化小孩数组,每个小孩指向下一个小孩坐标
int[] a = new int[500];
for(int i=0; i<a.length; i++) a[i] = (i+1)%a.length;
int current = 0; //记载当前位置
int previous = a.length-1; // //记载前一个位置
int count = 1; //计数器
while(previous != current) { //前一个小孩和当前小孩是同一个的时候结束循环
//向后面数数
previous = current;
current = a[current];
//如果数到3的倍数,则将前一个小孩指向当前小孩的下一个小孩下标位置
if(++count%3 == 0) a[previous] = a[current];
}
System.out.println(current);
}
}
分享到:
相关推荐
Java基础之数组练习2
c++数组练习题及答案。本套练习题包含了数组的各方面知识,题型包括判断题 填空题,编程题等
Java数组阶段的选择题、填空题、编程题、判断题都有,适合想自己测试下的学生以及准备出题的老师
C++字符数组练习题及解答[归类].pdf
数组练习
这东西对基础不扎实的同学最好,基础好的也可以来看看. 这东西对基础不扎实的同学最好,基础好的也可以来看看.
C语言数组练习题[1].pdf
数组练习javascript-2
数组练习javascript-3
C语言数组部分练习题的选择题,带答案,适合初学者对数组部分的练习使用。
题目:1 用for循环产生4行100列的二维数组,数组成员如下: 1,2,3.......100;...从这个数组中提取2行50列的二维数组,数组成员如下: 50,49,48......1; 56,57,58......105 将这2个数组用数组显示件显示在前面板.
Java数组练习题带答案.doc
C语言数组练习及答案.pdfC语言数组练习及答案.pdfC语言数组练习及答案.pdfC语言数组练习及答案.pdfC语言数组练习及答案.pdf
数组练习题Subject:数组
Java 数组demo ,纯属练习用。做个笔记,方便学习。
数组练习.sln
数组练习.zip
Java 数组练习题(1).docx
数组练习题Subject:数组
适合初学者学习操作JAVA数组