第五屆藍橋杯Java B——分糖果
有n個小朋友圍坐成一圈。老師給每個小朋友隨機發偶數個糖果,然後進行下面的遊戲:
每個小朋友都把自己的糖果分一半給左手邊的孩子。
一輪分糖後,擁有奇數顆糖的孩子由老師補給1個糖果,從而變成偶數。
反覆進行這個遊戲,直到所有小朋友的糖果數都相同為止。
你的任務是預測在已知的初始糖果情形下,老師一共需要補發多少個糖果。
【格式要求】
程式首先讀入一個整數N(2<N<100),表示小朋友的人數。
接著是一行用空格分開的N個偶數(每個偶數不大於1000,不小於2)
要求程式輸出一個整數,表示老師需要補發的糖果數。
例如:輸入
3
2 2 4
程式應該輸出:
4
資源約定:
峰值記憶體消耗(含虛擬機器) < 256M
CPU消耗< 1000ms
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int n = cin.nextInt(); int[] arr = new int[n]; int ans = 0; for (int i = 0; i < n; i++) arr[i] = cin.nextInt(); while (true) { int tmp = arr[0]; for (int i = 0; i < n - 1; i++) { arr[i] += arr[i + 1] >> 1; arr[i + 1] /= 2; } arr[n - 1] += tmp >> 1; arr[0] -= tmp >> 1; if (check(arr)) break; for (int i = 0; i < n; i++) if (arr[i] % 2 != 0) { ans += 1; arr[i]++; } } System.out.println(ans); } static boolean check(int[] arr) { int t = arr[0]; for (int i = 1; i < arr.length; i++) if (arr[i] != t) return false; return true; } }