|
Post by huangno1 on Mar 2, 2017 20:29:10 GMT -8
程式說明 英文題目 uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=7&page=show_problem&problem=532中文翻譯 (Lucky 貓的 UVA 園地) luckycat.kshs.kh.edu.tw/homework/q591.htm3歲的小明喜歡玩他的方塊積木,他總是把方塊疊在一起形成高度不一的方塊堆。然後他說:這是一面牆。5歲的姊姊小美聽到了就跟小明說:真正的牆高度應該要一樣才行。小明聽了覺得有道理於是決定要搬動一些方塊使所有方塊堆的高度一樣。如下圖。由於小明是個懶惰的小孩,他想要搬動最小數目的方塊以達成這個目的,你能幫助他嗎? Input 輸入包含好幾組資料,每組資料有2行,第一行有一個數字n,代表有幾堆方塊。第二行有n個數字分別代表這n堆方塊的高度hi。你可以假設1<=n<=50 1<=hi<=100 方塊的總數一定可以整除堆數n,也就是說一定可以使所有的方塊堆同樣高度。 如果輸入的n=0,代表輸入結束。 Output 對每一組輸入資料,首先輸出一行這是第幾組測試資料,下一行為"The minimum number of moves is k." k在這裡就是需搬動方塊最小的數目以使所有的方塊堆同一高度。每組測試資料後亦請空一行。請參考Sample Output. Sample Iutput 6 5 2 4 1 7 5 3 1 1 1 0 Sample Output Set #1 The minimum number of moves is 5. Set #2 The minimum number of moves is 0. #include <stdio.h> int MinNumMoves( int num [ ] , int n) { int i , times = 0 ; int sum = 0 , ave = 0 ; for ( i = 0 ; i < n ; i ++ ) sum += num [ i ] ; ave = sum / n ; for ( i = 0 ; i < n ; i ++ ) { if ( num [ i ] != ave ) { if ( num [ i ] > ave ) times += num [ i ] - ave ; } } return times ; } // --------------------------------------------------------- int main(void) { int n, t = 0; scanf("%d", &n); while(n!=0) { t += 1; int num[50] = {0}; for(int i=0; i<n; i+=1) { scanf("%d", &num );
}
printf("Set #%d\n", t);
printf("The minimum number of moves is %d.\n\n", MinNumMoves(num, n));
scanf("%d", &n);
}
return 0;
}
|
|