程序设计:勾股定理
对于一个直角三角形,有等式a^2+b^2=c^2恒成立,这就是勾股定理。
现在给出你边c的长度,请你求出有多少对不同a,b(a <= b)满足a^2+b^2=c^2,其实就是求有多少个不同形状的斜边为c的直角三角形个数。
输入格式
输入第一行一个整数c(1<=c<=10^6),表示三角形斜边的长度。
输出格式
按题目要求输出答案
本题注意事项:
1.注意整数c的范围小于10^6,已经超出int类型数据范围,则a和b的长度有可能也超出
2.输出个数两直角边长应满足a<=b,如直角三角形三边长a、b、c分别为3、4、5和4、3、5算一种
3.如果使用双重for循环依次枚举会超时
解析
一、打好框架
#include <bits/stdc++.h>
using namespace std;
int main() {
return 0;
}
二、输入斜边边长c+定义统计有几种不同形状的斜边为c的直角三角形个数的变量
long long c;
int cnt = 0;
cin >> c;
三、利用for循环统计不同形状的斜边为c的直角三角形个数
for(long long a = 1; a < c; a++) {
long long b = sqrt(c * c - a * a);
if(a <= b && a * a + b * b == c * c) {
cnt++;
}
}
四、输出结果并换行
cout << cnt << endl;
完整代码
#include <bits/stdc++.h>
using namespace std;
int main() {
long long c;
int cnt = 0;
cin >> c;
for(long long a = 1; a < c; a++) {
long long b = sqrt(c * c - a * a);
if(a <= b && a * a + b * b == c * c) {
cnt++;
}
}
cout << cnt << endl;
// for(int a=1; a<c; a++){
// for(int b=a; b<c; b++){
// if(a*a+b*b==c*c){
// cout<< a <<" " << b <<endl;
// cnt++;
// }
// }
// }会超时,不建议直接暴力枚举
return 0;
}