百度之星 度度熊拼三角(数学)

度度熊拼三角
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;
}

猜你喜欢

转载自blog.csdn.net/a17865569022/article/details/81589841