/* 报数游戏
有n个孩子站成一圈,从第一个孩子开始顺时针方向报数,报到3的人出列,下一个人继续从1报数,
直到最后剩下一个孩子为止。问剩下第几个孩子。下面的程序以10个孩子为例,模拟了这个过程,
请完善之(提示:报数的过程被与之逻辑等价的更容易操作的过程所代替)。
*/
import java.util.Vector;
public class 报数游戏 {
public static void main(String[] args) {
Vector a = new Vector();
for (int i = 1; i <= 10; i++) {
a.add("第" + i + "个孩子");
}
for (;;) {
if (a.size() == 1)
break;
for (int k = 0; k < 2; k++)
a.add(a.remove(0)); // 填空
a.remove(0);
}
System.out.println(a);
}
}
运行结果:
[第4个孩子]
package test01;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class NumberOff {
// 开始报数
public static void numberOff(List lis,int m){
while(lis.size()>1){
for(int i=0;i<m-1;i++)
lis.add(lis.remove(0));
lis.remove(0);
}
System.out.println("剩下最后一个人为:"+lis);
}
// 输入数据
public static int input(List lis){
Scanner scan = new Scanner(System.in);
System.out.print("输入人数:");
int n = scan.nextInt(); // 输入人数
System.out.print("输入报数到 m 出列(m):");
int m = scan.nextInt(); // 输入报数到 m 出列
for(int i=0;i<n;i++) lis.add(i+1);
return m;
}
public static void main(String[] args){
List lis = new ArrayList();
int m = input(lis); // 输入数据
numberOff(lis,m); // 开始报数
}
}
运行结果:
输入人数:10
输入报数到 m 出列(m):4
剩下最后一个人为:[5]