题目描述
给N条边,请找三条边,使其组成一个三角形,并使得这个三角形的周长最大。
输入
存在多个样例。 第一行是一个整数N(3≤N;≤10,000),如果N=0,则表示输入结束。 第二行是N个整数,整数处于[1,100000000]之间,为N条边的长度。
输出
输出最大周长三角形的周长,如果不能组成三角形,输出0。
样例输入
5 5 3 4 10 2 0样例输出
12
解题思路: 排序,逐个验证,找到最优解,输出。
AC代码:
#include <stdio.h>
#include <stdlib.h>
int cmp(const void* p1, const void* p2){ // 降序排列
return *(int *)p2 - *(int *)p1;
}
bool exam(int x,int y,int z){ // 验证三边能否组成一个三角形
if (x+y > z) return true;
return false;
}
int main()
{
int N;
while (scanf("%d",&N) != EOF && N != 0)
{
int ans = 0;
int num[10010] = {0};
for (int i = 0; i < N; i ++)
scanf("%d",&num[i]);
qsort(num,N,sizeof(num[0]),cmp);
for (int i = 2; i < N; i ++)
{
bool flag = exam(num[i],num[i-1],num[i-2]);
if (flag) {ans = num[i]+num[i-1]+num[i-2]; break;}
}
printf("%d\n",ans);
}
return 0;
}