有n根棍子,棍子i的长度为ai。想要从中取出三根组成周长尽可能长的三角形。请输入最大的周长,若无法组成三角形则输出0。
限制条件:3<=n<=100 ; 1<=ai<=10^6
输入示例:
n=5
a={2,3,4,5,10}
输出:
12
思路:利用三角形性质:任意两条边之和大于第三边。
三重循环枚举出所有组合-->判断是否符合条件-->,判断是否为当前最大周长。
#include <iostream>;
#define MAX_N 100
using namespace std;
int n,a[MAX_N];
int sove(){
int maxLen=0;
for(int i=0 ; i<n ; i++){
for(int j=i+1 ; j<n ; j++){
for(int k=j+1 ; k<n; k++){
if(a[i]+a[j]>a[k] && a[i]+a[k]>a[j] && a[j]+a[k]>a[i]){
if(a[i]+a[k]+a[j]>maxLen){
maxLen = a[i]+a[j]+a[k];
}
}
}
}
}
return maxLen;
}
int main(){
cin>>n;
if(n>=3 && n<=100){
for(int i=0;i<n;i++){
cin>>a[i];
}
cout<<sove();
}else{
return 0;
}
return 0;
}