分糖果問題(java)
阿新 • • 發佈:2019-01-29
10個小孩圍成一圈分糖果,老師分給第一個小孩10塊,第二個小孩2塊,第三個小孩8塊,第四個小孩22塊,第五個小孩16塊,第六個小孩4塊,第七個小孩10塊,第八個小孩6塊,第九個小孩14塊,第十個小孩20塊。然後所有的小孩同時將手中的糖分一半給右邊的小孩;糖塊數為奇數的人可向老師要一塊。問經過幾次後大家手中的糖塊一樣多?各有多少塊?
結果:public class Text06 { public static void main(String[] args) { int[] arr = {10,2,8,22,16,4,10,6,14,20}; int count = 0; while(!isSame(arr)) { int m = arr[9]; for(int i=9;i>0;i--)//後一個人的糖塊數為後一個人的一半+前一個人的一半,將最後一個儲存 { arr[i] = arr[i-1]/2+arr[i]/2; } arr[0] = m/2+arr[0]/2; count++; System.out.print(count+"......"); show(arr); for(int i=0;i<arr.length;i++)//奇數個糖塊的同學向老師要一個 { if(arr[i]%2!=0) arr[i]+=1; } } } public static void show(int[] arr)//打印出每次分完一輪後沒人手中糖塊數 { if(arr.length==0) System.out.println("No"); else { for(int i=0;i<arr.length;i++) { System.out.print(arr[i]+" "); } System.out.println(""); } } public static boolean isSame(int[] arr)//判斷所有人糖塊書是不是都相同,定義一個計數器,當計數器為陣列長度-1時,返回true { int count = 0; boolean b = false; for(int i=0;i<arr.length-1;i++) { if(arr[i]==arr[i+1]) count++; } if(count==arr.length-1) b = true; return b; } }