Java藍橋杯歷屆試題 分糖果
阿新 • • 發佈:2019-02-01
問題描述
有n個小朋友圍坐成一圈。老師給每個小朋友隨機發偶數個糖果,然後進行下面的遊戲:
每個小朋友都把自己的糖果分一半給左手邊的孩子。
一輪分糖後,擁有奇數顆糖的孩子由老師補給1個糖果,從而變成偶數。
反覆進行這個遊戲,直到所有小朋友的糖果數都相同為止。
你的任務是預測在已知的初始糖果情形下,老師一共需要補發多少個糖果。 輸入格式 程式首先讀入一個整數N(2<N<100),表示小朋友的人數。
接著是一行用空格分開的N個偶數(每個偶數不大於1000,不小於2) 輸出格式 要求程式輸出一個整數,表示老師需要補發的糖果數。 樣例輸入 3
2 2 4 樣例輸出 4
每個小朋友都把自己的糖果分一半給左手邊的孩子。
一輪分糖後,擁有奇數顆糖的孩子由老師補給1個糖果,從而變成偶數。
反覆進行這個遊戲,直到所有小朋友的糖果數都相同為止。
你的任務是預測在已知的初始糖果情形下,老師一共需要補發多少個糖果。 輸入格式 程式首先讀入一個整數N(2<N<100),表示小朋友的人數。
接著是一行用空格分開的N個偶數(每個偶數不大於1000,不小於2) 輸出格式 要求程式輸出一個整數,表示老師需要補發的糖果數。 樣例輸入 3
2 2 4 樣例輸出 4
分析:本題是一個模擬問題,需要建立一個
陣列來存放每一個小朋友的糖果。主要就是
在While迴圈裡面來進行糖果的分配。
/** * */ package 歷屆試題; import java.util.Scanner; /** * @author Administrator * */ public class 歷屆試題分糖果 { /** * @param args * 有n個小朋友圍坐成一圈。老師給每個小朋友隨機發偶數個糖果,然後進行下面的遊戲: 每個小朋友都把自己的糖果分一半給左手邊的孩子。 一輪分糖後,擁有奇數顆糖的孩子由老師補給1個糖果,從而變成偶數。 反覆進行這個遊戲,直到所有小朋友的糖果數都相同為止。 你的任務是預測在已知的初始糖果情形下,老師一共需要補發多少個糖果。 輸入格式 程式首先讀入一個整數N(2<N<100),表示小朋友的人數。 接著是一行用空格分開的N個偶數(每個偶數不大於1000,不小於2) 輸出格式 要求程式輸出一個整數,表示老師需要補發的糖果數。 樣例輸入 3 2 2 4 樣例輸出 4 */ public static void main(String[] args) { // TODO Auto-generated method stub int min = 10000; int max = 0; Scanner sc=new Scanner(System.in); int N=sc.nextInt(); int[] M=new int[N]; for (int i = 0; i < M.length; i++) { M[i]=sc.nextInt(); } int[] temp = new int[N];//第I個小孩的一半糖果 int count = 0; // for (int i = 0; i < M.length; i++) { // System.out.println(M[i]); // } while(min != max){ //求最大值和最小值並計算每個人糖果的一半 for (int i = 0; i < N; i++) { temp[i]=M[i]/2; if (M[i]>max) { max=M[i]; } if (M[i]<min) { min=M[i]; } } if (min==max) { break; }else { max=0; min=10000; } for (int i = 0; i < N; i++) { M[i]=temp[i]+temp[(i+1)%N]; if (M[i]%2!=0) { M[i]++; count++; } } } System.out.println(count); } }