//500个人手拉手围一圈,数3退1,直到还剩一个人,找出最后一个人的位置
//500个人手拉手围一圈,数3退1,直到还剩一个人,找出最后一个人的位置 //初始化数组 public class Count3Quit2 { public static void main(String[] args) { boolean [] arr = new boolean[500]; for(int i = 0;i<arr.length;i++) { arr[i] = true; } int CountNum = 0; int index = 0; int leftCount = arr.length; while(leftCount > 1) { if(arr[index]==true) { CountNum++; if(CountNum==3) { CountNum = 0; arr[index] = false; leftCount--; } } index++; if(index == arr.length) { index = 0; } } for(int i = 0;i<arr.length;i++) { if(arr[i] == true ) { System.out.print(i); } } } }
面向对象写法
//500个人手拉手围一圈,数3退1,直到还剩一个人,找出最后一个人的位置 public class Count3Quit3 { public static void main(String[] args) { KidCircle kc = new KidCircle(500); int countNum = 0; Kid k = kc.first; while(kc.count>1) { countNum++; if(countNum == 3) { countNum = 0; kc.delete(k); } k = k.right; } System.out.println(kc.first.id); } } class Kid { int id; Kid left; Kid right; } class KidCircle { int count =0; Kid first,last; KidCircle(int n) { for(int i = 0; i<n;i++) { add(); } } void add() { Kid k = new Kid(); k.id = count; if(count<=0) { first = k; last = k; k.left = k; k.right = k; } else { last.right = k; k.left = last; k.right = first; first.left = k; last = k; } count++; } void delete(Kid k) { if(count <= 0) { return; } else if (count == 1) { first = last = null; } else { k.left.right = k.right; k.right.left = k.left; if(k == first) { first = k.right; } else if(k == last){ last = k.left; } } count --; } }