【蓝桥杯】2014年第五届蓝桥杯省赛真题-Java语言B组-8-分糖果(历届试题 分糖果)

在这里插入图片描述分析:
用数组存储小朋友的糖果数。循环模拟分一半糖果给左边小朋友,奇数糖果数又老师补发一颗的过程,直到小朋友的 糖果数量相等。
注意数组首尾的处理。

代码实现:

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();				//N个小朋友
		int [] a = new int[N];
		for (int i = 0; i < a.length; i++) {
			a[i] = sc.nextInt();
		}
		
		int ans = 0;						//记录老师需要补发的糖果数
		
		while(true) {
			int t = a[0];
			
			/*处理前N-1个孩子的糖果数*/
			for (int i = 0; i <= N - 2; i++) {
				a[i] -= a[i] / 2;			//每个小朋友都把自己的糖果分一半给左手边的孩子
				a[i] += a[i+1]/2;			//每个小朋友接收右手边的孩子的一半糖果
				
				if(a[i] % 2 == 1) {			//拥有奇数颗糖的孩子由老师补给1个糖果
					a[i]++;
					ans++;
				}
			}
			
			/*最后一个孩子的糖果数单独处理*/
			a[N-1] -= a[N-1] / 2;
			a[N-1] += t / 2;
			if(a[N-1] % 2 == 1) {
				a[N-1]++;
				ans++;
			}
			
			/*检查所有小朋友的糖果数是否都相同*/
			if (check(a,N)) {
				System.out.println(ans);
				return;
			}
		}
	}

	/**
	 * 检查所有小朋友的糖果数是否都相同
	 * @param a		每个小朋友的糖果数
	 * @param n		小朋友的个数
	 * @return
	 */
	private static boolean check(int[] a,int n) {
		int t = a[0];
		for (int i = 1; i < n; i++) {
			if(a[i] != t) {
				return false;
			}
		}
		return true;
	}

}

猜你喜欢

转载自blog.csdn.net/allyyhh/article/details/88600818