1. 程式人生 > >分糖果問題(java)

分糖果問題(java)

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;
	}

}
結果: