求最大三角形周长

题目:有n根棍子,棍子i的长度为ai。想要从中选出三根棍子组成周长尽可能长的三角形。请输出最大的周长,若无法组成三角形则输出0。

限制条件

3 ≤ n ≤ 100

1 ≤ ai ≤ 10^6
输入

n = 5

a = {2,3,4,5,10}

输出

12(选择3、4、5时)

输入

n = 4

a = {4,5,10,20}

输出

0(无论怎么选都无法组成三角形)

解法:两种

1、暴力遍历时间复杂度n

 

#include<cstdio>
#include <algorithm>
using namespace std;

#define MAX_N 100

int n,a[MAX_N];
void solve()
{
    int ans=0;
    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(rest>ma)
                {
                    ans=max(ans,len);
                }
            }
        }
    }
    printf("%d\n",ans);
}
int main(void)
{
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%d",&a[i]);    
    }    
    solve();
    return 0;
 } 

2、先排序,然后判断相邻三个数是否可以组成三角形即可,时间复杂度取决于排序算法,nlog(n)

#include<cstdio>
#include <algorithm>
using namespace std;

#define MAX_N 100

int n,a[MAX_N];
void solve()
{
    int ans=0;
    sort(a,a+n);
    for(int i=0;i<n-2;i++)
    {
        if(a[i]+a[i+1]>a[i+2])
        {
            ans=a[i]+a[i+1]+a[i+2];
        }
     } 
    printf("%d\n",ans);
}
int main(void)
{
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%d",&a[i]);    
    }    
    solve();
    return 0;
 } 

 

posted @ 2020-05-20 09:43  渴望成为大佬的菜鸡  阅读(380)  评论(0)    收藏  举报