思路:1.首先判断是否为三角形。判断方法:任意两边之和大于第三边,两边之差小于第三边。
再优化一下:两小边之和大于的三边,(因为最长边与其他任意一条边的和一定大于剩下那条边)
最长边-其他两条边中的一条<剩下的一条边(其他两条较小边本身就小于最长边,相减之和就更加小与了)。(当然也可以枚举每一种情况)
#include<iostream>
using namespace std;
bool istri(int a, int b, int c)//判断是否构成三角形
{
if (a + b > c)
{
if (c - a < b)return true;
if (c - b < a)return true;
}
return false;
}
int main()
{
int a[3];
for (int i = 0;i < 3;i++)cin >> a[i];
for (int i = 0;i < 2;i++)//交换排序
{
for (int j = i + 1;j < 3;j++)
{
if (a[i] > a[j])
{
int t = a[i];
a[i] = a[j];
a[j] = t;
}
}
}
if (!istri(a[0], a[1], a[2]))
{//不是三角形的情况
cout << "Not triangle";
return 0;
}
//对每一种三角形的情况进行分析
if ((a[0] * a[0] + a[1] * a[1]) == (a[2] * a[2]))
{
cout << "Right triangle" << endl;
}
if (a[0] * a[0] + a[1] * a[1] > a[2] * a[2])
{
cout << "Acute triangle" << endl;
}
if (a[0] * a[0] + a[1] * a[1] < a[2] * a[2])
{
cout << "Obtuse triangle" << endl;
}
if (a[0] == a[1] || a[0] == a[2] || a[1] == a[2])
{
cout << "Isosceles triangle" << endl;
}
if (a[0] == a[1] && a[1] == a[2] && a[2] == a[0])
{
cout << "Equilateral triangle" << endl;
}
}