题目描述
n 只奶牛坐在一排,每个奶牛拥有 ai 个苹果,现在你要在它们之间转移苹果,使得最后所有奶牛拥有的苹果数都相同,每一次,你只能从一只奶牛身上拿走恰好两个苹果到另一个奶牛上,问最少需要移动多少次可以平分苹果,如果方案不存在输出 -1。
输入描述:
每个输入包含一个测试用例。每个测试用例的第一行包含一个整数 n(1 <= n <= 100),接下来的一行包含 n 个整数 ai(1 <= ai <= 100)。
输出描述:
输出一行表示最少需要移动多少次可以平分苹果,如果方案不存在则输出 -1。
示例1
输入
4
7 15 9 5
输出
3

解题思路:
方案存在条件:
1.苹果数必须全奇或全偶(因为你每次拿两个苹果不会改变苹果数的奇偶性质,但是最后要保证都变成为平均值,所以奇偶性必须相同)
2.总苹果数必须能整除奶牛只数,即平均数必须为整数
所以其他情况都返回-1
当满足前面两个条件后,我们只需要遍历数组,计算每个苹果数和平均值的差值,然后相加起来得到的答案res,再除以4即为移动次数(这里为啥除以4,是因为我们的res中是有取出和放入的,所以操作的苹果数只有 res/2 个,然后我们每次操作是2个苹果,所以移动次数为 res/4 )
代码:

    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextInt()){
            int n = sc.nextInt();
            int[] nums = new int[n];
            int sum = 0;
            int odd = 0;
            for(int i = 0;i<nums.length;i++){
                nums[i] = sc.nextInt();
                if(nums[i]%2!=0){
                    if(odd==-1){
                        System.out.println(-1);
                        return;
                    }
                    odd = 1;
                }else{
                    if(odd==1){
                        System.out.println(-1);
                        return;
                    }
                    odd = -1;
                }
                sum+=nums[i];
            }
            if(sum%n!=0){
                System.out.println(-1);
                return;
            }
            int avg = sum/n;
            int count = 0;
            for(int i = 0;i<nums.length;i++){
                if(nums[i]!=avg){
                    count+=Math.abs(nums[i]-avg);
                }
            }
            System.out.println(count/4);
        }
    }