列表

详情


NC200580. 勾股定理

描述

给定一个整数A。
求是否存在两个整数B,C使得长度为A,B,C的三条边可以组成一个直角三角形。

输入描述

第一行一个数字,表示样例个数。 
其中每个样例:
仅包含一行一个整数

输出描述

每个样例输出一行。 
如果存在符合条件的,请输出任意一组解,两个整数之间以空格分隔。
如果不存在任何符合条件的解,请输出`-1 -1`。


示例1

输入:

3
4
6
13

输出:

5 3
8 10
12 5

说明:

答案不唯一,只要输出符合题意即可通过。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C(clang 3.9) 解法, 执行用时: 2ms, 内存消耗: 376K, 提交时间: 2020-07-31 14:21:34

#include<stdio.h>
main()
{
	long long t,i,j,k1,k2,r,c,m,a,b;
	scanf("%d",&t);
	for(i=0;i<t;i++)
	{
		scanf("%lld",&m);
		if(m%2==0) 
		{
		    a=m/2;
			printf("%lld %lld\n",a*a-1,a*a+1);
		}
		else 
		{
			a=m/2;
			printf("%lld %lld\n",2*a*a+2*a+1,2*a*a+2*a);
		}
	}
}

C++11(clang++ 3.9) 解法, 执行用时: 7ms, 内存消耗: 372K, 提交时间: 2020-02-26 20:43:18

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		long long A,B,C;
		cin>>A;
		if(A&1)
			B=(A*A+1)/2,C=(A*A-1)/2;
		else 
			B=(A*A+4)/4,C=(A*A-4)/4;
		cout<<B<<" "<<C<<endl;
	}
    return 0;
}

C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 332K, 提交时间: 2020-04-29 15:20:37

#include<iostream>
int main(){
    long long T,A;
    std::cin>>T;
    while(T--){
        std::cin>>A;
        if(A&1) std::cout<<(A*A+1)/2<<" "<<(A*A-1)/2<<'\n';
        else std::cout<<(A*A+4)/4<<" "<<(A*A-4)/4<<'\n';
    }
}

上一题