題目有說每一 case 都可以重新排成所有 stack 都一樣高度,所以直接平分。
移動時,移動移步會造成另一 stack 少移動一步 (因為移動到其他 stack),所以只要把最後的
高度和所有 stack 現在的高度差加起來除以 2 ,即為最小搬動的次數。
注意:
輸出時,要多一行空行,最後一筆也是。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(void){
int n,amount,i;
int bricks[50],mov,sets=0;
while(scanf("%d",&n)!=EOF){
if(n==0) break;
amount=0;
for(i=0;i<n;i++){
scanf("%d",&bricks[i]);
amount+=bricks[i];
}
amount/=n;
mov=0;
for(i=0;i<n;i++){
mov+=abs(amount-bricks[i]);
}
mov/=2;
printf("Set #%d\n",++sets);
printf("The minimum number of moves is %d.\n\n",mov);
}
return 0;
}
沒有留言:
張貼留言