度度熊拼三角
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Problem Description
度度熊有 N 根木棒,每根木棒的长度为ai。 现在要挑选其中的三根,问能拼出的三角形的最大周长是多少。 如果不能拼成任何一个三角形,输出 −1。
Input
多组数据(不超过10组),读到EOF结束。 对于每一组数据: 第一行一个数 N 表示木棒数量。 第二行一共 N 个数,描述每一根木棒的长度。 1≤N≤1000 木棒长度都是不超过100000的正整数
Output
对于每一组数据,输出一个数表示答案。
Sample Input
Copy
3
1 1 100
7
1 9 9 90 2 2 4Sample Output
Copy
-1
22
将边从大到小排序,然后按照三角型两边与第三边的性质进行试探。
#include<bits/stdc++.h>
using namespace std;
bool cmp(int x,int y)
{
return x>y;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int num[1005];
for(int i=0;i<n;i++)
scanf("%d",&num[i]);
sort(num,num+n,cmp);
int cnt1=0,cnt2=1,cnt3=2;
int a=num[cnt1],b=num[cnt2],c=num[cnt3];
int sum=0,flag=0;
while(cnt1<n&&cnt2<n&&cnt3<n)
{
if(a>b-c&&b>a-c&&c>a-b)
{
sum=a+b+c;
flag=1;
break;
}
else
{
cnt3++;
}
if(cnt3>=n)
{
cnt1++;
cnt2++;
cnt3=cnt2+1;
a=num[cnt1];
b=num[cnt2];
c=num[cnt3];
}
}
if(flag==1)
printf("%d\n",sum);
else printf("-1\n");
}
return 0;
}