题目描述
n 只奶牛坐在一排,每个奶牛拥有 ai 个苹果,现在你要在它们之间转移苹果,使得最后所有奶牛拥有的苹果数都相同,每一次,你只能从一只奶牛身上拿走恰好两个苹果到另一个奶牛上,问最少需要移动多少次可以平分苹果,如果方案不存在输出 -1。
输入描述:
每个输入包含一个测试用例。每个测试用例的第一行包含一个整数 n(1 <= n <= 100),接下来的一行包含 n 个整数 ai
(1 <= ai <= 100)。
输出描述:
输出一行表示最少需要移动多少次可以平分苹果,如果方案不存在则输出 -1。
示例1
输入
4 7 15 9 5
输出
3
1 import java.util.Scanner; 2 3 /** 4 * 分苹果 5 * 1、或者直接平均值不为整数得不到 6 * 2、每次移动两个不会改变奇偶性 如果平均值和各个值奇偶性不同则无法得到, 7 * 3、然后以平均值为分界线 划分 计算小于平均值的值改变到到平均值的次数 8 * 9 * @author Dell 10 * 11 * 12 * 4 7 15 9 5 13 */ 14 public class Main { 15 static public int n = 4; 16 static public int[] num; //= {7,15,9,5}; 17 static public int sum; 18 static public int avg; 19 static public double avgDouble; 20 static public int count; 21 // static { 22 // for (int i = 0; i < num.length; i++) { 23 // sum += num[i]; 24 // } 25 // avg = sum / n; 26 // } 27 28 static public int f() { 29 if (avgDouble!=avg) { 30 return -1; 31 } 32 for (int i = 0; i < num.length; i++) { 33 if ((num[i] - avg) % 2 == 0/*奇偶性*/) { 34 int t = (num[i] - avg) / 2; 35 if (t > 0) { 36 count += t; 37 } 38 } else { 39 return -1; 40 } 41 } 42 return count; 43 } 44 45 public static void main(String[] args) { 46 Scanner sc = new Scanner(System.in); 47 n = sc.nextInt(); 48 num = new int[n]; 49 for (int i = 0; i < num.length; i++) { 50 num[i] = sc.nextInt(); 51 sum+=num[i]; 52 53 } 54 avgDouble = (sum*1.0)/n; 55 avg = (int)avgDouble; 56 System.out.println(f()); 57 58 } 59 }