给定4根木棍的长度,如果它们中存在3根木棍可以组成三角形,输出"TRIANGLE";如果它们无法组成三角形,但是它们中存在3根木棍可以组成退化的三角形(任意两边之和大于等于第三边,但是不是三角形),输出"SEGMENT";否则,输出"IMPOSSIBLE"。
注意: 木棍不能折断,也不能只用一部分长度。
输入
一行4个整数,4根木棍的长度。
输出
如果它们中存在3根木棍可以组成三角形,输出"TRIANGLE";如果它们无法组成三角形,但是它们中存在3根木棍可以组成退化的三角形,输出"SEGMENT";否则,输出"IMPOSSIBLE"。
原题链接:https://www.luogu.org/problemnew/show/CF6A
#include <iostream>
#include <cstdlib>
using namespace std;
int a[5];
int vis[5];
int t[5];//暂存所选数
int flag;
void dfs(int step)
{
if (step == 4)
{
//优先判断
if (t[1] + t[2] > t[3] && t[1] + t[3] > t[2] && t[2] + t[3] > t[1])
{
cout << "TRIANGLE" << endl;
exit(0);
}
if (t[1] + t[2] >= t[3] && t[1] + t[3] >= t[2] && t[2] + t[3] >= t[1])
{
flag = 1;
return;//回溯
}
}
for (int i = 1; i <= 4; i++)
{
if (!vis[i])
{
vis[i] = 1;
t[step] = a[i];
dfs(step + 1);
vis[i] = 0;
}
}
}
int main()
{
for (int i = 1; i <= 4; i++)
{
cin >> a[i];
}
dfs(1);
if (flag)
{
cout << "SEGMENT" << endl;
}
else
{
cout << "IMPOSSIBLE" << endl;
}
return 0;
}