洛谷CF6ATriangle

版权声明:晓程原创 https://blog.csdn.net/qq_43469554/article/details/89075967

给定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;
}

猜你喜欢

转载自blog.csdn.net/qq_43469554/article/details/89075967
今日推荐