天大夏令营机试第三题

题目

(天大机试是全英文的,这里题目是我凭记忆翻译出来的,错了别打我)

小红和小明要做风筝,小红认为直角三角形的风筝最好了(别问我怎么知道的)

但他们只有n根木棍,要从中间选出可以做成最大直角三角形的三根。

输入

第一行给你一个T,表示接下来要做T个风筝

剩下每次输入一个数N,表示现有N根木棍

后面一行输入N个数字,表示这几根木棍的长度

输出

输出能拼成最大三角形的三根木棍(升序输出)

示例输入

2

5

3  6 8 4 5

6

3 12 4 5 13 10

输出

3 4 5

5 12 13

我这道题做的时候仅仅过了部分样例

大致思想是,求出数组里所有能组成直角三角形的木棍,然后按斜边大小对其排序,最后升序输出

(= =)不知道哪里错了,有大佬来看看就好了

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std; 
bool tra(int a,int b,int c)
{
	if (a+b>c&&b+c>a&&a+c>a)
	{
	 if ((a*a + b*b == c*c) || (a*a + c*c == b*b) || (b*b + c*c == a*a))
	return 1;
    else
	return 0;
	}
	else
	return 0;
}
void judge(int a[],int n)
{
	int c[n][3]={0};
	int f=0;
	for(int i=0;i<n;i++)
	for(int j=i+1;j<n;j++)
	for(int k=j+1;k<n;k++)
	{
		if(tra(a[i],a[j],a[k])==1)
		{
		 c[f][0]=a[i];
		 c[f][1]=a[j];
		 c[f][2]=a[k];
		 f++;
		 } 
	}
	for(int i=0;i<f;i++)
	sort(c[i],c[i]+3);
	for(int i=0;i<f;i++)
	for(int j=0;j<f-1;j++)
	{
		if(c[j][2]<c[j+1][2])
		swap(c[j],c[j+1]);
	}
	if(c[0][2]!=0)
	cout<<c[0][0]<<" "<<c[0][1]<<" "<<c[0][2]<<endl;
	
}
 
 
int main() 
{
	int t;
	cin>>t;
	while(t--)
	{
	  int num;
	  cin>>num;
	  int a[num];
	  for(int i=0;i<num;i++)
	  cin>>a[i];
	  judge(a,num);
	}
	return 0;
}

  

猜你喜欢

转载自www.cnblogs.com/fantastic123/p/9293521.html