勾股数的定义
3个正整数(a,b,c)满足 a^2 + b^2 = c^2 的关系,则称(a,b,c)为勾股数
输入描述
- 第一行为数组 n,表示第二行的数组有多少元素。
- 第二行为数组元素。
输出描述
- 每一行表示找到的勾股数。
思路
- 创建一个数组 arr,对原数组 a 的所有元素求得平方值后,存入到 arr 对应的位置。
- 对数组 arr 进行双重 for 循环,得到外层元素 arr[i],内存遍历 i 之后的每一个元素 arr[j],求的 arr[i] + arr[j]的值 sum
- 判断 sum 是否在 arr 数组中,如果在,则去除 sum,得出对应的勾股数为:
sqrt(arr[i])
、sqrt(arr[j])、
sqrt(sum)`。
代码实现。
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int size = sc.nextInt();
Integer[] arr = new Integer[size];
for (int i = 0; i < size; i++) {
int n = sc.nextInt();
arr[i] = n * n;
}
HashSet<Integer> set1 = new HashSet<>(Arrays.asList(arr));
List<Integer[]> result = new ArrayList<>();
for (int i = 0; i < arr.length; i++) {
for (int j = i; j < arr.length; j++) {
int sum = arr[i] + arr[j];
if (set1.contains(sum)){
result.add(new Integer[]{(int)Math.sqrt(arr[i]), (int)Math.sqrt(arr[j]), (int)Math.sqrt(sum)});
}
}
}
for (Integer[] arr1 : result) {
System.out.println(arr1[0] + " " + arr1[1] + " " + arr1[2]);
}
}
}
结果
// 输入
10
1 2 3 4 5 6 7 8 9 10
// 输出
3 4 5
6 8 10