题目描述:
给你N个数的。询问:该序列中是否存在个数能构成三角形。
数据范围:每个数
,
输入格式:
第一行输入M,表示M次询问;
接下来M行,每行第一个数字为N,表示数字个数,接下来输入N个数
输出共M行,如果存在则输入1,否则输入0。
解题思路:
首先将这N个数排序,不难看出:答案为不存在任意相邻三个数无法构成三角形
因此,如果答案不存在,对于arr数组有:arr[i-1]+arr[i]<=arr[i+1]
因此,在最值的情况下我们有:arr[i-1]+arr[i]=arr[i+1],显然这是斐波那契数列
注意到,当N超过45时,斐波那契数列已经超过了。故只需要检验N<=45的情况。(具体N是多少不太记得了,但大概是这个范围)
代码实现:
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int M;
cin>>M;
while(M--){
int N;
cin>>N;
if(N>45){
cout<<"1"<<endl;
continue;
}
int arr[45];
for(int i=0;i<N;i++) cin>>arr[i];
sort(arr,arr+N);
bool test=0;
if(N<=2){
cout<<"0"<<endl;
continue;
}
for(int i=1;i<N-1;i++){
if(arr[i-1]+arr[i]>arr[i+1]){
test=1;
break;
}
}
cout<<test<<endl;
}
return 0;
}