|
Post by huangno1 on Feb 24, 2017 8:59:32 GMT -8
程式說明
3歲的小明喜歡玩他的方塊積木,他總是把方塊疊在一起形成高度不一的方塊堆,然後說:「這是一面牆。」
5歲的姊姊美美聽到了就跟小明說:「真正的牆高度應該要一樣才行。」小明聽了覺得有道理,於是決定要搬動一些方塊使所有方塊堆的高度一樣。由於小明是個懶惰的小孩,他想要搬動最小數目的方塊以達成這個目的,你能幫助他嗎?
輸入說明:
。輸入可包含好幾組資料,每組資料有2行,第一行有一個數字n,代表有幾堆方塊。
。第二行有n個數字分別代表這n堆方塊的高度hi (假設1<=n<=50 1<=hi<=100)
。方塊的總數一定可以整除堆數n,也就是說一定可以使所有的方塊堆同樣高度。
。如果輸入的n=0,代表輸入結束。
輸出說明:
對每一組輸入資料,首先輸出第一行顯示這是第幾組測試資料,第二行為"The minimum number of moves is k."
k在這裡就是需搬動方塊最小的數目以使所有的方塊堆同一高度。
每組測試資料後亦請空一行。
範例輸入
6
5 2 4 1 7 5
3
1 1 1
0
範例輸出
Set #1
The minimum number of moves is 5.
Set #2
The minimum number of moves is 0.
#include<stdio.h>
int main()
{
/*
set: 第n筆測試資料, brick_num: 共有幾堆方塊, brick_height[50]: 方塊的高度
sum: 方塊總數, ave: 平均牆高, move: 需移動的方塊數
*/
int set = 1, brick_num, i, brick_height[50], sum, ave, move;
scanf("%d", &brick_num); //輸入方塊堆數
while(brick_num!=0) //brick_num=0,代表輸入結束
{
sum = 0 ;
move = 0 ;
for ( i = 0 ; i < brick_num ; i ++ )
{
scanf ( "%d" , &brick_height [ i ] ) ;
sum += brick_height [ i ] ;
}
ave = sum / brick_num ;
for ( i = 0 ; i < brick_num ; i ++ )
{
if ( brick_height [ i ] - ave != 0 )
move ++ ;
}
printf ( "Set #%d\nThe minimum number of moves is %d.\n\n" , set , move ) ;
scanf ( "%d" , &brick_num ) ;
set ++ ;
}
return 0;
}
|
|