一道华为笔试题,这道题思路挺简单的,符合简单题的属性。但是我却AC不了,包括现在我也没看出来漏了什么。最后通过50%的用例,剩下的百度也没找到原因。
先记录一下吧。
数字<10000,所以用int型就够了,所以剩余用例和这个无关,题目还要求输出要排序,我看了下我的输出,应该也是符合条件的。无奈
/**
* @version 1.0.0
* @auth lsjweiyi
* @date 2021/8/15
*/
public class Main3 {
public static void main(String[] args) {
// 寻找[n,m]范围内的勾股数元祖
int n = 1;
int m = 10000;
int index=0;//记录找到多少组勾股数元祖
for (int i = n; i <= m; i++) {
int c=0;
for (int j = i + 1; j <= m; j++) {
if (huZhiPanDuan(i, j)) { // 判断是否互质
continue;
}
int sum = i * i + j * j;
c = (int) Math.sqrt(sum);
if (c>m){
break;
}
if (c * c != sum) { // 判断是否是勾股数
continue;
}
if (huZhiPanDuan(i, c) || huZhiPanDuan(j, c)) {
continue;
}
index++;
System.out.println(i + " " + j + " " + c);
}
if (c>m){
break;
}
}
//如果范围内没有找到符合条件的勾股数元祖,则输出NA
if (index==0){
System.out.println("NA");
}
}
// 互质判断
public static boolean huZhiPanDuan(int a, int b) {
for (int i = 2; i <= a ; i++) {
if (a % i == 0 && b % i == 0) {
return true;
}
}
return false;
}
}