每个输入包含一个测试用例。每个测试用例的第一行包含一个整数M(1 <= M<= 100),接下来的一行包含M个整数ni(1 <= ni <= 100)。
输出一行表示最少需要移动多少次可以平分苹果,如果方案不存在则输出-1。
4 7 15 9 5
3
2 3 6
-1
/* 思路:这里有两种情况是不能实现评平均分配的 ①总和不能被m整除 ②总和可以被m整除,但是有某些组员距离平均值的差值不是偶数 当排除上面的情况之后,统计每个元素与平均值之间的差值的一半 最后把这个总和除以2,就是需要移动的次数,因为移动式成对的,一个数减少,就是添加到另一个数上面 */ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int m = Integer.parseInt(br.readLine()); String[] str = br.readLine().split(" "); int[] arr = new int[m]; int sum = 0,avg = 0,count = 0; for(int i = 0;i<m;i++){ arr[i] = Integer.parseInt(str[i]); sum += arr[i]; } if(sum %m != 0){ System.out.println(-1); return; } else{ avg = sum / m; for(int i = 0;i<m;i++){ int temp = Math.abs(arr[i] - avg); if(temp %2 != 0){ System.out.println(-1); return; }else{ count += temp/2; } } } System.out.println(count/2); } }
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int[] record = new int[n]; int sum =0; for (int i = 0; i < n; i++) { record[i]=scanner.nextInt(); sum+=record[i]; } if (sum%n!=0){ System.out.println(-1); return; } int average= sum/n; int count=0; for (int i = 0; i < n; i++) { int diff=record[i]-average; if (diff%2!=0){ System.out.println(-1); return; } if (diff>0){ count+=diff/2; } } System.out.println(count); } }