Bob 用磚塊堆出不同高度的堆疊,Alice 建議將所有堆疊調整為相同高度。目標是找出最少需要移動多少塊磚塊。此為 ACM 競程經典入門題(UVa 591)。
n (1 ≤ n ≤ 50),第二行為 n 個堆疊高度 h_i (1 ≤ h_i ≤ 100)。n 整除,故必存在解。n = 0 結束輸入。k。sum,目標高度 avg = sum / n。h[i] > avg 則 moves += h[i] - avg。#include <stdio.h>
int main()
{
int n, i, sum, average, moves, case_num = 1;
int heights[100];
while(scanf("%d", &n), n != 0)
{
sum = moves = 0;
for(i = 0; i < n; i++) scanf("%d", &heights[i]);
for(i = 0; i < n; i++) sum += heights[i];
average = sum / n;
for(i = 0; i < n; i++)
if(heights[i] > average) moves += heights[i] - average;
printf("Set #%d\n", case_num);
printf("The minimum number of moves is %d.\n\n", moves);
case_num++;
}
return 0;
}

輸入:6\n5 2 4 1 7 5\n0
總和 = 24,平均 = 4。
超出部分:5→+1, 7→+3, 5→+1,總計 5。
輸出:Set #1\nThe minimum number of moves is 5. ✓