1925: 统计平方和三元组的数目
思路:暴力枚举
我们可以枚举所有 a>b 的平方和三元组 (a,b,c)。由于 a^2+b^2=b^2+a^2,所以 (b,a,c) 也是平方和三元组。所以只需统计 a>b 的情况,最后把统计结果乘以 2,即为答案。
枚举 a,b,如果 a^2+b^2 ≤n*n (c<=n) 且 c= 是整数,那么我们找到了一个平方和三元组 (a,b,c),计数器加一。
int c = sqrt(c2);
sqrt 的返回类型是 double;编译器发现要把一个 double 赋给 int,这是"隐式类型转换",会直接把小数部分截断(向 0 取整,不是四舍五入)
class Solution {
public:
int countTriples(int n) {
int ans=0;
for(int a=1;a<n;a++){
for(int b=1;b<a && a*a+b*b<=n*n;b++){
int c2=a*a+b*b;
int c=sqrt(c2);
if(c*c==c2) ans++;
}
}
return ans*2; // (a,b,c) 和 (b,a,c) 各算一次
}
};