首页 > 其他分享 >如何给定一个数组,找出其中满足勾股数的三个值?

如何给定一个数组,找出其中满足勾股数的三个值?

时间:2024-08-22 19:49:09浏览次数:12  
标签:arr int sum sqrt 股数 给定 数组 new

勾股数的定义

3个正整数(a,b,c)满足 a^2 + b^2 = c^2 的关系,则称(a,b,c)为勾股数

输入描述

  • 第一行为数组 n,表示第二行的数组有多少元素。
  • 第二行为数组元素。

输出描述

  • 每一行表示找到的勾股数。

思路

  1. 创建一个数组 arr,对原数组 a 的所有元素求得平方值后,存入到 arr 对应的位置。
  2. 对数组 arr 进行双重 for 循环,得到外层元素 arr[i],内存遍历 i 之后的每一个元素 arr[j],求的 arr[i] + arr[j]的值 sum
  3. 判断 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

标签:arr,int,sum,sqrt,股数,给定,数组,new
From: https://www.cnblogs.com/jacobsblog/p/18374599

相关文章