2039题的代码:http://acm.hdu.edu.cn/showproblem.php?pid=2039
这种题目一看就知道很简单,关键的核心就是三角形是两边之和大于第三边。第一次的代码如下所示,提交的时候出现了Output Limit Exceeded,第一次遇到这个问题,然后我去查了一下,Output Limit Exceeded 多数发生在递归遍历的过程中,多输出了一些内容(比如说空格)。还指如果输入某一组数据,程序返回的结果是一直输出某个结果,死循环输出之类的。
#include<stdio.h>
int main()
{
int m,a,b,c;
while(scanf("%d",&m)!=EOF)
{
while(m--)
{
scanf("%d %d %d",&a,&b,&c);
if(a+b>c&&a+c>b&&b+c>a) printf("YES\n");
else printf("NO\n");
}
}
return 0;
}
很明显这里在输出完之后,需要继续输M的值,再继续循环之前的操作。但是题目没有要求我们要循环输入一个数。这时候我改编了第二次代码,如下:
#include<stdio.h>
int main()
{
int m,a,b,c;
scanf("%d",&m);
while(m--)
{
scanf("%d %d %d",&a,&b,&c);
if(a+b>c&&a+c>b&&b+c>a) printf("YES\n");
else printf("NO\n");
}
return 0;
}
这时候我在oj提交得到了错误的答案。我检查了好几遍程序,感觉没有错。重新审题,突然发现自己有个小瑕疵,就是输入格式是用整型的,如果改成double型会发生什么事情呢。
第三次改编:
#include<stdio.h>
int main()
{
int m;
double a,b,c;
scanf("%d",&m);
while(m--)
{
scanf("%lf %lf %lf",&a,&b,&c);
if(a+b>c&&a+c>b&&b+c>a) printf("YES\n");
else printf("NO\n");
}
return 0;
}
这时候答案就正确了。
总结:以后做题的时候一定要仔细阅读题目,还有输入输出的格式。这道题本是很简单的题。基本的思路都懂,就是容易忽略了一些很基本很简单的地方。