牛客网-分苹果(网易)
题目描述 n 只奶牛坐在一排,每个奶牛拥有 a i 个苹果,现在你要在它们之间转移苹果,使得最后所有奶牛拥有的苹果数都相同,每一次,你只能从一只奶牛身上拿走恰好两个苹果到另一个奶牛上,问最少需要移动多少次可以平分苹果,如果方案不存在输出 -1。 输入描述: 每个输入包含一个测试用例。每个测试用例的第一行包含一个整数 n(1 <= n <= 100),接下来的一行包含 n 个整数 a i (1 <= ai <= 100)。 输出描述: 输出一行表示最少需要移动多少次可以平分苹果,如果方案不存在则输出 -1。 示例1 输入 4 7 15 9 5 输出 3 解题思路: (1)首先计算所有奶牛拥有的苹果之和,除以奶牛个数,若无余数,说明是可以平分的,若有余数,返回-1; (2)因为每一次只能从奶牛身上拿走两个苹果,所以需要计算每个奶牛拥有的苹果数减去平均数,看这个差是否为2的倍数,若不是,返回-1;若是,统计所有差大于0(或者小于0)的差之和,然后除以2,则为最小需要移动的次数 7 15 9 5 average=9; -2 6 0 -4 正数之和等于负数之和的绝对值 找到所有为正数的值的和,为6, 6/2=3 代码如下: #include<iostream> #include<vector> using namespace std; int Minimal(vector<int> vec