原题链接:https://vjudge.net/problem/UVA-815
分类:函数
备注:思维
前言:作者说方法很多,但是我只想着AC了就好,其它方法以后再来想吧,我只能说我这个代码挺简单的。
注意:精确度不用特别注意也可以AC,就算uDebug没过,只要答案相差的不离谱应该没问题。
代码如下:
#include<stdio.h>
#include<stdlib.h>
int n, m, cnt, kase;
double H[1000], left;
int cmp(const void* a, const void* b)
{
return *(double*)a - *(double*)b;
}
void solve()
{
int coverd = 1;
double level = H[1] , percent = 0;
for (int i = 2; i <= cnt; i++)
{
while (H[i] == H[i - 1]) { i++; coverd++; continue; }
double cha = H[i] - H[i - 1];
double detaV = cha * coverd * 100;
if (left >= detaV)
{
left -= detaV;
level = H[i];
coverd++;
}
else break;
}
if (left > 0)level += left / (coverd * 100);
printf("Water level is %.2lf meters.\n", level);
percent = 1e2 * coverd / cnt;
printf("%.2lf percent of the region is under water.\n\n", percent);
}
int main(void)
{
while (scanf("%d%d", &n, &m) == 2 && n)
{
printf("Region %d\n", ++kase);
cnt = n * m;
for (int i = 1; i <= cnt; i++)
scanf("%lf", &H[i]);
scanf("%lf", &left);
qsort(H + 1, cnt, sizeof(double), cmp);
solve();
}
return 0;
}
本文解析了一道UVA-815的水位计算题,通过函数分类,采用一种简单但有效的代码实现方法。文章详细介绍了算法思路,包括如何处理重复高度值、计算淹没区域百分比等,并分享了完整的C语言代码。
&spm=1001.2101.3001.5002&articleId=104506073&d=1&t=3&u=91617ae462c04dfe85bd10553e2a1f4d)
454

被折叠的 条评论
为什么被折叠?



