nyoj-659-判断三角形(大坑)

判断三角形

时间限制:1000 ms  |  内存限制:65535 KB
难度:2
描述

  小明非常喜欢研究三角形。现在,小明已经知道三角形的三条边,如果三条边能组成三角形,小明就会很高兴,他就会得到一个“YE”,如果他经过进一步的研究知道它又是等腰三角形,

他又会得一个“YE”,他再次研究出它又是一个等边三角形,当然,他又会得到一个“YE”。

小明当然不想自己判断了!那请你帮他写一个程序计算出给你三条边小明会得到几个“YE”?

提示1:最后普通三角形得到一个,等腰得到两个,等边得到三个

提示2:请严格按下面输出格式输出

输入
首先,输入一个T,代表有几组测试数据。
接下来有T行,每行有三个数,代表三条边。
输出
对于每组测试数据首先输出”Case #H:”H代表第几组测试数据,接下来输出小明得到的“YE”
数目,如果小明得不到“YE”,请输出“NO”。
样例输入
23 3 25 2 1
样例输出
Case #1:YE YECase #2:NO

解题思路:

        这是一道很水很水的题,但是我却做了半天,是我思路出问题了。

        一开始我让sum=0,三个条件并列,每符合一个条件则sum++,然后对应几就输出几个YE。

        但是当输入2 2 5时,本来不能构成三角形,但是我的输出却为YE

        这是为什么呢?

         因为三个条件不是并列的,是包含关系,即第二个条件的前提是第一个条件,第三个条件的前提是前两个条件。

         看好多人都说明明测试数据正确,但是却WA了,这个时候一定要静下心来,如果不是在比赛过程中,你可以先放下,忙会儿其他的,分散一下注意力之后再回来做。

代码

#include<stdio.h>
#include<algorithm>
using namespace std;
int bian[5];
int main()
{
	int n;
	int i;
	int now=1;
	int sum;
	scanf("%d",&n);
	while(n--)
	{
		for(i=1;i<=3;i++)
		    scanf("%d",&bian[i]);
		sort(bian+1,bian+4);
		sum=0;
		/*最初做法(三条件并列)
		if(bian[1]+bian[2]>bian[3])
		    sum++;
		if(bian[1]==bian[2]||bian[2]==bian[3])
		    sum++;
		if(bian[1]==bian[2]&&bian[1]==bian[3])
		    sum++;
		*/ 
		if(bian[1]+bian[2]>bian[3])
		{
		    sum++;
		    if(bian[1]==bian[2]||bian[2]==bian[3])
		    {
		        sum++;
		        if(bian[1]==bian[2]&&bian[1]==bian[3])
		            sum++;
		    }
		}
		printf("Case #%d:\n",now);
		switch(sum)
		{
			case 0:printf("NO\n");break;
			case 1:printf("YE\n");break;
			case 2:printf("YE YE\n");break;
			case 3:printf("YE YE YE\n");break;
		}
		now++;		
	}
	return 0;
}


你可能感兴趣的:(nyoj-659-判断三角形(大坑))