1三角形------暴力,规律

题目描述:
有n根棍子,棍子的长度为a,想要从中选出3根棍子组成周长尽可能长的三角形

约束条件:
  3<= n <= 100
 1 <= ai <= 10^6

法一:暴力求解(做任何题首先想到的方法,因为三重循环,所以复杂度为n的3次方,因为n小于100,所以方法可行)(复杂度为nlogn)

#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
    int ans=0,a[105],n;
    cin>>n;
    for(int i=0;i<n;i++)
        cin>>a[i];
    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 sum=len-ma;//另外两边的长和
                if(sum>ma)
                     ans=max(ans,len);
            }
        }
    }
    cout<<ans<<endl;
}
法二:先排序,因为所有的边一定是相邻的边,所以只需要看看三个相邻的边是否构成即可,并且,因为是由大到小,所以,只要满足,就结束循环。复杂度(nlogn),logn是因为sort排序

注:sort降序排列:sort(begin,end,greater<data-type>())

#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
    int i,ans=0,a[105],n;
    cin>>n;
    for(int i=0;i<n;i++)
        cin>>a[i];
    sort(a,a+n,greater<int>());
    for(i=2;i<n;i++)
        if(a[i]<a[i-1]+a[i-2])
         break;
    cout<<a[i]+a[i-1]+a[i-2]<<endl;
}



posted @ 2020-07-20 20:48  Joelin12  阅读(205)  评论(0)    收藏  举报