分苹果
题目描述
n 只奶牛坐在一排,每个奶牛拥有 ai 个苹果,现在你要在它们之间转移苹果,使得最后所有奶牛拥有的苹果数都相同,每一次,你只能从一只奶牛身上拿走恰好两个苹果到另一个奶牛上,问最少需要移动多少次可以平分苹果,如果方案不存在输出 -1。
输入描述:
每个输入包含一个测试用例。每个测试用例的第一行包含一个整数 n(1 <= n <= 100),接下来的一行包含 n 个整数 ai(1 <= ai <= 100)。
输出描述:
输出一行表示最少需要移动多少次可以平分苹果,如果方案不存在则输出 -1。
示例1
输入
复制
4 7 15 9 5
输出
复制
3
解题思路
此题是想法题,想出来思路以后就是一个水题,算出苹果的总数sum。
1、判断-1的情况:如果sum 不能平分给所有的奶牛的话,那么输出值是-1,如果存在一个奶牛的苹果数a[i]与 sum/n的差值不是偶数的话,那么输出值也是-1。
2、求值:我们求出所有奶牛与平均值的sum/n的差值之和del,我们每移一次苹果,对应的一头奶牛苹果数-2,而另一头奶牛的苹果数+2,宏观来讲,我们的差值del减小了4,很明显,要求出最小的移动次数,只需要求解del/4即可。
解题代码
import java.util.Scanner;
/**
* 网易-分苹果
* @author yangjieyu
*
*/
public class Main{
private int n;
private int []a;
private int resualt;
private int sum;
public static void main(String []args) {
Main main5 = new Main();
main5.get();
}
private void init() {
Scanner in = new Scanner(System.in);
n = in.nextInt();
a = new int[n];
sum = 0;
for(int i = 0 ; i<n;i++) {
a[i] = in.nextInt();
sum+=a[i];
}
in.close();
}
private void get() {
init();
int del = 0;
resualt = -2;
for(int i = 0 ; i<n&&resualt!=-1;i++) {
//不能平均分为n份,则输出-1
if(sum%n!=0) {
resualt = -1;
}else {
//如果存在一个奶牛的苹果与平均值相差不是2,输出-1
if((a[i]-(sum/n))%2!=0) {
resualt = -1;
}else {
del+= Math.abs(a[i]-(sum/n));
}
}
}
System.out.println(resualt==-1? resualt:del/4);
}
}