2014年7月12日 星期六

uva 591 Box of Bricks

題目有說每一 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;
}

沒有留言:

張貼留言