計蒜客|等邊三角形
阿新 • • 發佈:2019-01-10
蒜頭君手上有一些小木棍,它們長短不一,蒜頭君想用這些木棍拼出一個等邊三角形,並且每根木棍都要用到。 例如,蒜頭君手上有長度為 1,2,3,3 的4根木棍,他可以讓長度為1,2 的木棍組成一條邊,另外 2 跟分別組成 2條邊,拼成一個邊長為 3 的等邊三角形。蒜頭君希望你提前告訴他能不能拼出來,免得白費功夫。
輸入格式
首先輸入一個整數 n(3≤n≤20),表示木棍數量,接下來輸入 n 根木棍的長度 pi(1≤pi≤10000)。
輸出格式
如果蒜頭君能拼出等邊三角形,輸出"yes"
,否則輸出"no"
樣例輸入1
5 1 2 3 4 5
樣例輸出1
yes
樣例輸入2
4 1 1 1 1
樣例輸出2
no
#include <iostream> using namespace std; int n,flag=0,sum=0; int length[20]; int group[3]= {0};//設第一條邊所在的組為0組 void dfs(int i,int group_num) { group[group_num]+=length[i]; if(group[1]>sum/3.0||group[0]>sum/3.0||group[2]>sum/3.0) { group[group_num]-=length[i]; return ; } if(group[0]==sum/3.0&&group[1]==sum/3.0) { flag=1;//符合 return ; } if(i+1<n) { if(!flag)dfs(i+1,0); if(!flag)dfs(i+1,1); if(!flag)dfs(i+1,2); } group[group_num]-=length[i]; return ; } int main() { cin>>n; for(int i=0; i<n; i++) { cin>>length[i]; sum+=length[i]; } dfs(0,0); if(flag)cout<<"yes"; else cout<<"no"; return 0; }