大家好,我这个蓝名小蒟蒻又双叒叕来写题解啦!

这题毫无疑问是很水的。但想要做这题,首先要知道一个幼儿园小班小学五年级的道理:三角形的两条短边相加必须大于第三边。

为什么呢?因为,如果两条短边相加等于第三边的话,就无法在两条边之间形成角度,否则就会有两条边够不着彼此,只能形成一条直线,也就是题目中所说的退化的三角形。如果小于的话就更不用说了,三条边互相碰不着。

解释了这么多,现在该开始讲正事儿了。

我们可以用3个for枚举三角形的三条边用哪条木棍,然后写一个函数,判断这三条边能不能构成三角形,或者是退化的三角形。

如下:

    for(int i=1; i<=4; i++)
    {
        for(int j=1; j<=4; j++)
        {
            if(i==j)continue;
            for(int k=1; k<=4; k++)
            {
                if(k==i||k==j)continue;
                t=max(t,zajtc(a[i],a[k],a[j]));
            }
        }
    }

注意中间的continue不能省去,否则同一条木棍会被用多次,自然而然也就会“WA的一声哭了出来”。

zajtc函数如下:

int zajtc(int x,int y,int z)
{
    if(x>y)swap(x,y);
    if(x>z)swap(x,z);
    if(y>z)swap(y,z);
    if(x+y==z)return 1;
    if(x+y>z)return 2;
    if(x+y<z)return 0;
}

如上文函数,我们先用前三句话把这三条枚举出来的边排好序,然后返回值,能组成三角形为2,能组成退化的三角形为1,啥都不能为0。

献完整AC程序:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>

using namespace std;
int zajtc(int x,int y,int z)
{
    if(x>y)swap(x,y);
    if(x>z)swap(x,z);
    if(y>z)swap(y,z);
    if(x+y==z)return 1;
    if(x+y>z)return 2;
    if(x+y<z)return 0;
}//上文提到过的函数部分
int a[5];
int t;
int main()
{
    cin>>a[1]>>a[2]>>a[3]>>a[4];
    for(int i=1; i<=4; i++)
    {
        for(int j=1; j<=4; j++)
        {
            if(i==j)continue;
            for(int k=1; k<=4; k++)
            {
                if(k==i||k==j)continue;
                t=max(t,zajtc(a[i],a[k],a[j]));
            }
        }
    }//上文的程序片段,for循环部分
    if(t==0)cout<<"IMPOSSIBLE";
    if(t==1)cout<<"SEGMENT";
    if(t==2)cout<<"TRIANGLE";//输出,上文提到过,0为不行,1为退化的三角形,2为三角形

    return 0;
}