链接:https://ac.nowcoder.com/acm/contest/11163/A
来源:牛客网
题目描述
给出6根棍子,能否在选出3根拼成一个三角形的同时剩下的3根也能组成一个三角形?
输入描述:
首先在一行中给出一个 t,1 \le t \le 10^3t,1≤t≤10
3
,代表测试数据的组数
接下来t行,每行给出6个数字代表棍子长度,棍子长度为正且小于10^910
9
输出描述:
在一行中输出 “Yes” or “No”
示例1
输入
复制
2
1 1 1 1 1 1
1 2 3 4 5 6
输出
复制
Yes
No
思想:
用算法库函数里的全排列函数,可以枚举每一种情况,然后对每一种情况进行判断,如果是就真,否则为假。
# include <iostream> # include <algorithm> using namespace std; int p[6]; int f=0; int fun(int a,int b,int c){ if(a+b>c&&a+c>b&&b+c>a) return 1; return 0; } int main(){ int n; cin>>n; while(n--){ for(int i=0;i<6;i++){ cin>>p[i]; } sort(p,p+6); do{ if(fun(p[0],p[1],p[2])&&fun(p[3],p[4],p[5])){ f=1; break; } }while(next_permutation(p,p+6)); if(f) cout<<"Yes"<<endl; else cout<<"No"<<endl; f=0; } return 0; }
总结:
自己想用dfs,可是不太会写,用for写结果过不了,而且很麻烦,也很容易出错,当遇到全排列的问题时,可以线下想用一下全排列函数是否可行,自己对着函数不是很理解,导致自己卡住了,所以遇到可用全排列时可优先想全排列函数。