2039

2039题的代码:http://acm.hdu.edu.cn/showproblem.php?pid=2039

图片发自App

这种题目一看就知道很简单,关键的核心就是三角形是两边之和大于第三边。第一次的代码如下所示,提交的时候出现了Output Limit Exceeded,第一次遇到这个问题,然后我去查了一下,Output Limit Exceeded 多数发生在递归遍历的过程中,多输出了一些内容(比如说空格)。还指如果输入某一组数据,程序返回的结果是一直输出某个结果,死循环输出之类的。

#include

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;

}

图片发自App

很明显这里在输出完之后,需要继续输M的值,再继续循环之前的操作。但是题目没有要求我们要循环输入一个数。这时候我改编了第二次代码,如下:

#include

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;

}

图片发自App


这时候我在oj提交得到了错误的答案。我检查了好几遍程序,感觉没有错。重新审题,突然发现自己有个小瑕疵,就是输入格式是用整型的,如果改成double型会发生什么事情呢。

第三次改编:

#include

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;

}

这时候答案就正确了。

总结:以后做题的时候一定要仔细阅读题目,还有输入输出的格式。这道题本是很简单的题。基本的思路都懂,就是容易忽略了一些很基本很简单的地方。

你可能感兴趣的:(2039)