三角形

问题描述:  

        输入三角形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;
}

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值