约瑟夫问题是一个很有趣的问题,不是因为人死的很惨痛,而是因为感到,数学和程序有时候的确是可以救命的。受马士兵老师的启发,写下了这个问题的实现方法。 public class Count3Quit {//约瑟夫问题的数组实现,有时候数学和程序是可以救命的。 public static void main(String args[]) { boolean [] arr =new boolean[2];//思路就是这样,让还活着的人的真值为true,死人的真值为false;《几个人你定》 for(int i=0;i arr[i] = true; } int leftCount = arr.length;//开始数数的那个人的后边有多少人 int index=0;//下标初始化为0 int countNum=0;//计数器的初始值为0 while(leftCount>1) {//最后那个人的后面没有人的话,循环结束 if(arr[index]==true){ countNum++;//开始计数 if(countNum==3) {//当计数到3的时候,这个人被false,从新开始计数,活着的人的数组长度-1; countNum=0; arr[index]=false; leftCount--; } } index++;//被false的那个人的,下一个人开始报数 if(index==arr.length) {//当数组的下标等于数组长度时,代表着从开始的那个人开始再次报数,新的循环开始。 index=0; } } for(int i=0;i if(arr[i]==true){ System.out.println("God bless you,The "+(i+1)+"th people will be live.");//之所以+1是因为数组的下标从0开始,你懂的。 System.out.println("Tips:数字代表第几个人,默认开始的那个人的标号为1."); } } } }