题目
有n根棍子,棍子i的长度为ai。想要从中选出3根棍子组成周长尽可能长的三角形。请输出最大的周长,若无法组成三角形则输出0。
限制条件
- 3≤n≤1000
- 1≤ai≤106
样例
输入
n = 5
a = {2,3,4,5,10}
输出
12(选择3,4,5时)
输入
n = 4
a = {4,5,10,20}
输出
0(无论怎么选都无法组成三角形)
选择3根棍子,它们能组成三角形的充要条件为最长棍子的长度<其余两根棍子的长度之和。
首先用三重循环枚举所有的棍子选择方案,再利用上式判断能否组成三角形。如果可以,那么该三角形的周长就是答案
//输入
int n, a[MAX_N];
void solve(){
int ans=0;//答案
//i<j<k,这样棍子就不会被重复选中了
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
for(int k=j+1;k<n;k++){
int len=a[i]+a[j]+a[k]; //周长
int ma=max(a[i],max(a[j],a[k]));//最长棍子的长度
int rest=len-ma;//其余两根棍子的长度之和
if(ma<rest){
//可以构成三角形,如果可以更新答案则更新
ans=max(ans,len);
}
}
}
//输出
printf("%d\n",ans)
}