《挑战程序设计》P16
1.6.1先从简单题开始
题意:给你n根棍子,每根棍子长a[i],让你从中选三根棍子,组成周长尽可能长的三角形
解析:书上给的例子时间复杂度是O(n^3)的,小规模的数据可能还好,大了就不行了,下面我自己推了一个O(nlogn)的写法
把棍子长度由大到小进行排序,因为要周长尽可能的长,所以从大的选起,然后再选邻近的两个,如果不能组成就不可能了,因为换根更短的就更不可能了

#include<bits/stdc++.h>
using namespace std;
const int maxn = 105;
int a[maxn];
bool cmp(int a,int b)
{
return a>b;
}
int main(void)
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,a+n,cmp);
int ans = 0;
for(int i=0;i<n-2;i++)
{
if(a[i]+a[i+1]>a[i+2] && a[i]+a[i+2]>a[i+1] && a[i+1]+a[i+2]>a[i])
{
ans = a[i]+a[i+1]+a[i+2];
break;
}
}
printf("%d\n",ans);
return 0;
}