蓝桥杯PREV-32——历届试题 分糖果

 历届试题 分糖果  
时间限制:1.0s   内存限制:256.0MB
    
问题描述
  有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:

  每个小朋友都把自己的糖果分一半给左手边的孩子。

  一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。

  反复进行这个游戏,直到所有小朋友的糖果数都相同为止。

  你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。
输入格式
  程序首先读入一个整数N(2<N<100),表示小朋友的人数。
  接着是一行用空格分开的N个偶数(每个偶数不大于1000,不小于2)
输出格式
  要求程序输出一个整数,表示老师需要补发的糖果数。
样例输入
3
2 2 4
样例输出

4



import java.util.Scanner;

/**
 * 
 * @author hhit.soft141.xxf
 * @date 2017-2-3
 * 
 */
public class Main {

	/**
	 * @param args
	 */

	public static void main(String[] args) {

		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		int[] a = new int[n];
		int[] b = new int[n];
		for (int i = 0; i < a.length; i++) {
			a[i] = scanner.nextInt();
		}

		int j = 0;
		int state = 0;
		while (true) {

			for (int i = 0; i < a.length; i++) {

				b[i] = a[i] / 2;
			}

			for (int i = 0; i < a.length; i++) {

				if (i < a.length - 1) {

					a[i] = (a[i] / 2 + b[i + 1]);

				} else {
					a[i] = (a[i] / 2 + b[0]);
				}

			}
			for (int i = 0; i < a.length; i++) {
				if (a[i] % 2 != 0) {
					a[i]++;
					j++;
				}
			}

			for (int i = 0; i < a.length - 1; i++) {
				if (!(a[i] == a[i + 1])) {
					state = 0;
					break;
				} else {
					state = 1;
				}

			}
			if (state == 1) {
				break;
			}

		}

		System.out.println(j);

	}
}


猜你喜欢

转载自blog.csdn.net/qq_37518622/article/details/61615684