寫著玩兒:數三退一
阿新 • • 發佈:2019-02-04
/** *500個小孩兒,每次數三個人,第三個人離開。 *最後剩下的是第幾個小孩兒 *數三退一 */ public class Count3Quit { public static void main (String[] args) { boolean[] arr =new boolean [500]; for (int i=0;i<=arr.length-1;i++) { arr[i] = true; } int leftCount = arr.length; int countNum = 0; int index = 0; while(leftCount>1) { if (arr[index] == true) { countNum++; if (countNum==3) { countNum=0; leftCount--; arr[index]=false; } } index ++; if (index ==arr.length) { index = 0; } } for(int i=0;i<arr.length;i++) { if (arr[i]==true ) { System.out.println(i); } } } }
/** *面向物件思路 */ public class Count3Quit2 { 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--; } }