CF6A Triangle -dfs
题意
- 有4个棍子
- 问 其中三个能否组合成 三角形。
- 如果能组成那么,输出TRIANGLE
- 如果不能组成,但是任意两边之和 >= 第三边 输出SEGMENT
- 如果完全不能组成,输出 IMPOSSIBLE
想法
-
dfs+排列(先排序.保证,得到三条边顺序也是从小到大)
-
dfs(int start ,int step)
- start是当前开始的序号
- step是当前有几条边了
-
判断三角形的条件如下:b已经是排序好了的
-
if(b[0]+b[1]>b[2]) flag=2; if(b[0]+b[1]==b[2]&&!flag) flag=1;
-
//CF6A Triangle
// Created by majoe on 2020/5/29.
//
#include <bits/stdc++.h>
using namespace std;
int a[5];
int b[3];//储存路径
int flag = 0;
void dfs(int start ,int step){
if (step == 3){
if(b[0]+b[1]>b[2])
flag=2;
if(b[0]+b[1]==b[2]&&!flag)
flag=1;
return;
}
for (int i = start; i < 4 ; ++i) {
b[step] = a[i];
dfs(i+1,step+1);
}
return;
}
int main(){
for (int i = 0; i < 4; ++i) {
cin >> a[i];
}
sort(a,a+4);//先排序.保证,得到顺序也是从小到大
dfs(0,0);
if(flag==0) cout<<"IMPOSSIBLE";
if(flag==1) cout<<"SEGMENT";
if(flag==2) cout<<"TRIANGLE";//根据flag状态输出结果
return 0;
}