UVA815 洪水 紫書習題 4-10
阿新 • • 發佈:2018-12-03
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; }