UVA815 洪水 紫书习题 4-10

UVA815 洪水 紫书习题 4-10

写题之前,先讲下自己的思路,用个快速排序,把格子高度从高到矮排好,然后假设所有格子都有水,算出高度,如果高度小于最高的格子,就把最高的格子从列表中删去,继续计算,直到算出正确答案。
快速排序库 stdlib.h 里的qsort函数

写完后,发现输出空,程序未正常结束,检查了一下 原因是scanf %d的时候要加个地址符号。 然后又发现自己去除数组最大值的时候,标号忘了减一,因为数组是从0开始的。
然后改完后,过了样例,开始提交oj。

第一次提交 wa 使用debug查找原因,查找前怀疑是浮点数问题。
通过比对,发现自己错在两组输出间要空出一行!!!题目里的样例输入只给了一组,所以忘了看说明了,加了个\n后,ac了。这题写的好快呀 20分钟就写完了,紫书说思路有很多,还有什么思路呢?

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int high[910];
int m,n,kase=0;
int cmp(const void *a,const void *b)
{
    return (*(int*)a-*(int*)b);
}
int main()
{
//    freopen("input.txt","r",stdin);
//    freopen("output.txt","w",stdout);
    while(scanf("%d%d",&m,&n)==2&&m)
    {
        int mn=m*n;
        memset(high,0,sizeof(high));
        int totalh=0;
        for(int i=0;i<mn;i++)
        {

            scanf("%d",&high[i]);
            totalh+=high[i];

        }
        int water;scanf("%d",&water);
        qsort(high,mn,sizeof(int),cmp);
        double result;
        for(;;)
        {
            result=((water+0.0)/100+totalh)/mn;
            if (result>high[mn-1])break;
            totalh-=high[mn-1];
            mn--;
        }
        printf("Region %d\n",++kase);
        printf("Water level is %.2f meters.\n",result);
        printf("%.2f percent of the region is under water.\n\n",100*(mn+0.0)/(m*n));


    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43328498/article/details/84716856