题目链接
#include<iostream>
#include<vector>
using namespace std;
int main() {
int n;
while (cin >> n) {
if (n == 0) break;
vector<int> nums = vector<int>(n, 0);
int sum = 0;
for (int i = 0; i < n; i++) {
cin >> nums[i];
sum += nums[i];
}
int average = sum / n;
int result = 0;
for (int i = 0; i < n; i++) {
if ((nums[i] - average) > 0) result += (nums[i] - average);
}
cout << result << endl;
cout<< endl;
}
}
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
Integer size = scanner.nextInt();
if (size == 0) {
break;
}
ArrayList<Integer> list = new ArrayList<>();
Integer sum = 0;
for (int i = 0; i < size; i++) {
int num = scanner.nextInt();
sum += num;
list.add(num);
}
Integer average = sum / size;
Integer res = 0;
//由于题目中说明了保证积木总数能被积木堆数整除,那么肯定能够把多出来的转到少的积木堆上面的
for (int i = 0; i < list.size(); i++) {
if (list.get(i) > average) {
res += list.get(i) - average;
}
}
System.out.println(res);
System.out.println();
}
}
}
while 1:
try:
n = int(input())
if n == 0:
break
ls = list(map(int, input().split()))
ls.sort()
m = sum(ls) // n
moves = 0
for i in ls:
moves += abs(i - m)
print(moves//2)
print()
except:
break
#include <stdio.h>
#include <stdlib.h>
int main() {
int n;
while (scanf("%d", &n) == 1) {
if (n == 0) break;
int *nums = (int *)malloc(n * sizeof(int));
int sum = 0;
for (int i = 0; i < n; i++) {
scanf("%d", &nums[i]);
sum += nums[i];
}
int average = sum / n;
int result = 0;
for (int i = 0; i < n; i++) {
if ((nums[i] - average) > 0) result += (nums[i] - average);
}
printf("%d\n\n", result);
free(nums);
}
return 0;
}