问题描述:
输入三角形3条边的长度值(均为正整数),判断是否能为直角三角形的3个边长。如果可以,则输出yes,如果不能,则输出no。如果根本无法构成三角形,则输出not a triangle。
知识点:1.假设a<=b<=c,判断是否三角形只需要判断a+b>c。
2.勾股定理。
分析:
第2点没什么好说的,勾股定理:a^2+b^2=c^2。
关键是第一点,有人可能会好奇为什么只需要a+b>c。下面将进行详细说明。
首先,我们如何判断三条边是否能够构成三角形呢?两边之和大于第三边,两边之差小于第三边。要注意的是,这里的两边,指的是任意两边。所以我们假设三条边为a,b,c,a<=b<=c,此时我们需要判断下面6条语句。
但我们真的需要6条语句一一判断吗?不需要的,我们只需要判断a+b是否会大于c,即最小的两条边的和是否会大于最大的边。
为什么呢?
(一)如果a+b>c
如果a+b>c,则a+c>=a+b>c>b,从左一可以推出左二,同理,如果a+c>b,则b+c>=a+c>b>a,从左二可以推出左三。
接下来,a+b>c可以推出c-b>a和c-a>b;a+c>b可以推出b-a>c。所以,此时6条公式全部满足条件,可以构成三角形。
(二)如果a+b<c
那就不满足两边之和大于第三边,那就构不成三角形了~
代码:
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
//1.输入
int length[3];
for(int i=0; i<3; i++)
{
cin>>length[i];
}
//2.计算与输出
sort(length,length+3);//非递减排序
int a=length[0];
int b=length[1];
int c=length[2];
if(a+b>c)//是否能够构成三角形
{
if((a*a+b*b)==c*c)//是否是直角三角形
{
cout<<"yes"<<endl;
}
else
{
cout<<"no"<<endl;
}
}
else
{
cout<<"not a triangle"<<endl;
}
return 0;
}