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;
}
浙公网安备 33010602011771号