1. 程式人生 > >擺積木

擺積木

i++ amp 結果 blog 組成 不同的 scan 輸出 積木

題目描述

zzq很喜歡玩積木。一天,他把許多積木塊組成了好多高度不同的堆,每一堆都是一個摞一個的形式。然而此時,他又想把這些積木堆變成高度相同的。但是他很懶,他想移動最少的積木塊來實現這一目標,你能幫助他嗎?

輸入

輸入包含多組測試樣例。每組測試樣例包含一個正整數n,表示zzq已經堆好的積木堆的個數。
接著下一行是n個正整數,表示每一個積木堆的高度h,每塊積木高度為1。其中1<=n<=50,1<=h<=100。
測試數據保證積木總數能被積木堆數整除。
當n=0時,輸入結束。

輸出

對於每一組數據,輸出將積木堆變成相同高度需要移動的最少積木塊的數量。
在每組輸出結果之間輸出一個空行。

樣例輸入

6
5 2 4 1 7 5
0

樣例輸出

5

題意概括:

求出將所有積木堆的高度都變為相同需要移動的最少次數。

題意分析:

求出所有積木堆的平均高度,然後用所有高於或低於平均高度的積木堆減去平均高度或用平均高度減去積木堆高度(每一個都要計算),最後所有差的和就是最終結果。

代碼:

 1 #include<stdio.h>
 2 #include<string.h>
 3 
 4 int main()
 5 {
 6     int i,n, sum, k,flag=1;
 7     int a[55];
 8     while(scanf("%d", &n), n != 0
){ 9 sum = k = 0; 10 for(i = 0; i < n; i++){ 11 scanf("%d", &a[i]); 12 sum += a[i]; 13 } 14 k = sum / n; 15 for(i = 0, sum = 0; i < n; i++){ 16 if(a[i] > k) 17 sum += (a[i]-k); 18 } 19 if
(flag != 1) 20 printf("\n"); 21 printf("%d\n", sum); 22 flag++; 23 } 24 return 0; 25 }

擺積木