习题4-10 洪水 UVa815

算法竞赛入门经典(第2版)第4章 函数和递归

题4-10洪水  UVa815

感悟。

1、从网站下载英文原题,重点在看输入输出数据与格式。

2、反复中英文对照,愣是没看懂样例中的Water level is 46.67 meters.

3、题意没理解,编程就没法开始。

4、搜索还是搜索http://blog.csdn.net/code4101/article/details/38540759,看到这副图,马上明白,本题很快就能弄懂,归根结底,还是英文水平次了点。不过呢,没有下图,反复读英文,还是不能读懂的。


5、开始编码。有个疑问,水平面刚好与该区域齐平,算不算淹没?不算,题中提到under water。

6、多次提交WA,对边界进行多次修改,无水,水将整个网格淹没,但还是WA

7、从http://blog.csdn.net/code4101/article/details/38540759拷贝代码,进行对拍,才发现,是输出格式问题,此题与以往不同,以往是例子间有空行,本题是每个例子后有空行,Follow
the output for each region with a blank line.修改,提交AC。

8、本题对水量为0应该没有处理,本人已进行了测试。看看时间2016-11-13 21:50

9、本题容易卡壳有两个地方,一是水是部分淹没还是全部淹没网格,否WA,二是每个例子后要跟一个空行,否WA。第二点,不通过对拍,是查不出来的。

10、很高兴,第四章结束,也就是本题为什么本人做得比较急的原因,到第五章真好,等了很久了。

附上AC代码,编译环境Dev-C++4.9.9.2

#include <stdio.h>

const int maxn=40;
int elevation[maxn*maxn];
int cubic[maxn*maxn];
int main(){
    int row,col;
    int i,j;
    int water;
    float level;
    int count;
    int tmp;
    int elevationsum;
    int kase;
    float percent;
    kase=0;
    while(scanf("%d%d",&row,&col)&&row&&col){
        count=0;
        for(i=0;i<row;i++){
            for(j=0;j<col;j++){
                scanf("%d",&elevation[count]);//区域海拔
                count++;
            }
        }
        scanf("%d",&water);//水量
        
        for(i=0;i<count;i++){//冒泡排序,区域海拔高度自小到大
            for(j=i+1;j<count;j++){
                if(elevation[i]>elevation[j]){
                    tmp=elevation[i];
                    elevation[i]=elevation[j];
                    elevation[j]=tmp;
                }
            }
        }
        
        //淹没某个区域的总水量
        for(i=0;i<count-1;i++){
            cubic[i]=10*10*((elevation[i+1]-elevation[i])*(i+1));
        }
        cubic[i]=0;        
        
        for(i=1;i<count;i++){
            cubic[i]+=cubic[i-1];
        }
        
         //找出水淹没的地区
        for(i=0;i<count;i++){
            if(water<=cubic[i]){
                break;
            }
        }
        
        if(i==count){//水将网格淹没
            elevationsum=0;
            for(j=0;j<count;j++){
                elevationsum+=elevation[j];
            }
            level=(water*1.0/100+elevationsum)/count;
            percent=100.00;
        }else{//水未将网格淹没
            elevationsum=0;
            for(j=0;j<=i;j++){
                elevationsum+=elevation[j];
            }
            level=(water*1.0/100+elevationsum)/(i+1);
            percent=(i+1)*1.0/count*100;
        }
        
//        if(kase>0)//若加上此两行,立马WA 2016-11-13 21:48
//            printf("\n");
        kase++;
        
        printf("Region %d\n",kase);
        printf("Water level is %.2f meters.\n",level);
        printf("%.2f percent of the region is under water.\n",percent);
        printf("\n");
    }
    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值