Hdu 2088 - ox of Bricks

逻辑上比较简单的一道数学题,但是输出格式相当费脑。

题目大意是输入一个N,代表以下将输入几根积木柱子,在输入N个数字,代表每一根柱子所含的积木个数。

要求每一次移动一块积木,使得N根柱子一样高,输出最小移动次数。

如图:

 

 

 

这题的最大恶心之处就在于输出格式,“Output a blank line between each set.” , 即每个测试数据之间有一个空行,但是N=0的时候将没有空行直接结束。

 

 

我一开始的PE代码:

#include <stdio.h>
#include <math.h>
int main()
{
    int n,h[55],i,sum,step;
        while(scanf("%d",&n),n)
        {
            sum = 0;
            for(i=0;i<n;i++)
            {
                scanf("%d",&h[i]);
                sum += h[i];
            }
            sum /= n;
            step = 0;
            for(i=0;i<n;i++)
            {
                if(h[i]>sum)
                    step += h[i]-sum;
            }
            printf("%d\n\n",step);
        }
        return 0;
}

我一开始认为while(n)语句为:当n=0时,while里面的所有代码都不会运行,也不会输出\n\n。但就是PE不解释啊。。。

 

 

以下为AC代码:

#include <stdio.h>
int main()
{
    int n,h[55],i,sum,step;
    int cnt=0;  //注意此处
    while(scanf("%d",&n),n)
    {
        if(cnt != 0) printf("\n");  //注意此处
        sum = 0;
        for(i=0;i<n;i++)
        {
            scanf("%d",&h[i]);
            sum += h[i];
        }
        sum /= n;
        step = 0;
        for(i=0;i<n;i++)
        {
            if(h[i]>sum)
                step += h[i]-sum;
        }
        printf("%d\n",step);
        cnt++;  //注意此处
    }
    return 0;
}

 

 

你可能感兴趣的:(Hdu 2088 - ox of Bricks)