描述
一个直角三角形的两个直角边是a,b(a≤b),其斜边是c,且a,b,c 都是正整数。
现在我们已经知道了斜边长度c,请问这个直角三角形的两个直角边的长度是什么?
输入描述
输入一个整数c(1≤c≤10000)。
输出描述
输出两个整数a,b表示答案。保证有整数解。如果有多个可能的答案,请确保a尽可能的小。
样例输入 1
5
样例输出 1
3 4
AC代码:
#include <cmath>
#include <iostream>
typedef long long Int;
Int c, a, b;
bool isSqrt(Int x) {
double sqrt = std::sqrt(x);//这里一开始写的时候变成了Int,粗心大意,应该改为双精度浮点数,否则后面的比较没有用,判断它是不是个整数。
return (Int)sqrt == sqrt;
}
int main() {
Int c;
std::cin >> c;
for (Int a = 1; a < c; a++) {//这里一开始用了双层循环,因为c最大10000所以10000*10000=100000000,复杂度爆表,改为单层。
Int b2 = c * c - a * a;
if (isSqrt(b2)) {
Int b = std::sqrt(b2);
std::cout << a << ' ' << b << std::endl;
break;
}
}
return 0;
}