看了杭电OJ1065,觉得没什么问题,自信满满的写了代码,提交以后就是不过,晕。
仔细看看,没发现什么毛病啊!这是我最初的代码:
#include <stdio.h>
#include <math.h>
#define pi acos(-1)
int main()
{
int n, year;
int t;
float x, y;
float area;
scanf("%d", &n);
for (t = 1; t <= n; t++)
{
scanf("%f%f", &x, &y);
area = pi * (x * x + y * y) / 2;
year = ceil(area / 50);
printf("Property %d: This property will begin eroding in year %d.\n", t, year);
}
printf("END OF OUTPUT.\n");
return 0;
}
今天得空,仔细比对原题说明,输入输出格式,有没有回车,有没有空格,反复提交了好多次,还是不过。咱总得为自己的智商找个说法吧!
于是网上找了一段代码,仔细比对,调整,经过若干次失败以后,终于过了,这是水题通过的一个里程碑。
下面是通过的代码:
#include <stdio.h>
#include <math.h>
#define pi 3.1415926
int main()
{
int n, year;
int t;
double x, y, r;
double area;
scanf("%d", &n);
for (t = 1; t <= n; t++)
{
scanf("%lf%lf", &x, &y);
r = sqrt(x * x + y * y);
area = pi * r * r / 2;
year = ceil(area / 50);
printf("Property %d: This property will begin eroding in year %d.\n", t, year);
}
printf("END OF OUTPUT.\n");
return 0;
}
结论:
1,pi要定义成3.1415926;定义成acos(-1)不行;
2,浮点数要定义成double,不能定义成float,虽然自认为精度够了;
3,一定要开平方计算出 r 后再算圆面积,直接用 r平方 计算圆面积不行。
怀疑测试中有非常边缘的数据,差之毫厘,影响结果
敬告初学者,遇到问题不过,一定不要灰心,百炼成钢么