题目:为了验证洪水对房子的影响,需要一个m*n矩阵的模型,其中每个元素代表10*10的区域,
用给定体积的水灌进去,看被淹没的区域,问水的高度和被淹没区域所占的百分比,
边界认为无限高,没有水从边界流走。
分析:排序。将同样高度的合并,依次按阶段判断水能否到达下一个高度。
(建筑体积(要乘100)+水的体积)/ 建筑面积 就是高度。
说明:好久没刷题了( ⊙ o ⊙ )!
#include <stdio.h>
#include <stdlib.h>
int block[909];
int high[909];
int size[909];
int cmp(const void *a, const void *b)
{
return *(int *)a - *(int *)b;
}
int main()
{
int m, n, water, cases = 1;
while (~scanf("%d%d",&m,&n) && m) {
for (int i = 0; i < m*n; ++ i) {
scanf("%d",&block[i]);
}
scanf("%d",&water);
qsort(block, m*n, sizeof(int), cmp);
int sum = 0, index = m*n;
for (int i = 0; i < m*n; ++ i) {
if (block[i] != block[i-1]) {
if (sum*100+water <= i*block[i]*100) {
index = i;
break;
}
}
sum += block[i];
}
printf("Region %d\n",cases ++);
printf("Water level is %.2lf meters.\n",0.01*(water+100*sum)/index);
printf("%.2lf percent of the region is under water.\n\n",100.0*index/m/n);
}
return 0;
}