题目描述
有一次,老师给小明N根小木棒,要他从中选出K根,使这K根当中的任意三根都能拼成一个三角形。老师告诉他,构成一个三角形的条件是:任意两边之和大于第三边,任意两边之差小于第三边。
小明思考后,发现将这些小木棒按长短顺序排列后,很容易解决问题。
输入
输入二行
第一行一个整数表示:N(3≤N≤500)
第二行输入N个整数,相互之间用一个空格隔开
输出
输出:K的最大值
样例输入
6161 19 26 348 220 529
样例输出
3
提示
基本思路:如果三角形中二条较小边的和大于最大边,则此三条边可以构成三角形。对于有序排列的数,只要确定了能构成三角形的最小数和最大数,中间的每一个数都符合条件
#include<iostream>
using namespace std;
int main()
{
int n;
int i,j,temp,sum=0,t=0;
int a[502];
cin>>n;
for(i=0;i<n;i++)
cin>>a[i];
for(i=0;i<n;i++)
for(j=0;j<n-1;j++)
if(a[j]<a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
while(t!=n-1)
{
temp=2;
for(i=t+1;i<n-1;i++)
if(a[i]+a[i+1]>a[t])
temp++;
if(temp>sum)
sum=temp;
t++;
}
cout<<sum<<endl;
return 0;
}