有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; }