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

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

时间:2024-08-22 19:49:09浏览次数:16  
标签: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

相关文章

  • C语言基础--数组详解
    目录数组的概述1数组的概念2数组的分类一维数组1一维数组的定义2数组的访问3数组元素的初始值3.1先定义,后设置值3.2定义同时设置初始值3.2.1全部设置初始值3.2.2部分设置初始值4一维数组的应用实例5一维字符数组5.1一维字符数组的定义5.2一维字符......
  • [小白入门]一文掌握C/C++中数组和循环结合(堵车问题、红绿灯问题)
    1.堵车问题假如现在给定从出发地到目的地的道路条数和每条路上的车辆情况为:第一条路第二条路第三条路第四条路第五条路第六条路90705278108120且车辆数大于50为轻度拥堵;大于70为中度拥堵;大于90为重度拥堵。那么如何存储这些数据?---很显然要用数......
  • 代码随想录 -- 数组 -- 螺旋矩阵II
    59.螺旋矩阵II-力扣(LeetCode)每画一条边都要坚持一致的左闭右开注意处理n为奇数时的矩阵中心点classSolution(object):defgenerateMatrix(self,n):res=[[0]*nforainrange(n)]startX=0startY=0loop=mid=n/2c......
  • 代码随想录 -- 数组 -- 区间和
    58.区间和(第九期模拟笔试)(kamacoder.com)暴力解法大概率超时,应采用前缀和解法p[i] 表示vec[0]到vec[i]的累加和求vec[m] 到vec[n] 的和只需要 p[n]-p[m] 即可知识点input函数Python3 中raw_input()和input()进行了整合,去除了raw_input(),仅保留了i......
  • 「字符串」前缀函数|KMP匹配:规范化next数组 / LeetCode 28(C++)
    概述为什么大家总觉得KMP难?难的根本就不是这个算法本身。在互联网上你可以见到八十种KMP算法的next数组定义和模式串回滚策略,把一切都懂得特别混乱。很多时候初学者的难点根本不在于这个算法本身,而是它令人痛苦的百花齐放的定义。有的next数组从0下标开始,有的从1开始;有的表......
  • 信息学奥赛初赛天天练-71-NOIP2016普及组-基础题2-进制转换、二进制转八进制、八进制
    NOIP2016普及组基础题24以下不是CPU生产厂商的是()AIntelBAMDCMicrosoftDIBM8与二进制小数0.1相等的八进制数是()A0.8B0.4C0.2D0.19以下是32位机器和64位机器的区别是()A显示器不同B硬盘大小不同C寻址......
  • 面试+算法之动态规划(Java):斐波那契、背包问题、走棋盘、分苹果、连续子数组最大和、
    概述Dynamicprogramming,简称DP,动态规划,基础算法之一,维基百科的解释:是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所耗时......
  • 2024-08-21:用go语言,给定一个从 0 开始索引的整数数组 nums 和一个整数 k,请设计一个算
    2024-08-21:用go语言,给定一个从0开始索引的整数数组nums和一个整数k,请设计一个算法来使得数组中的所有元素都大于或等于k,返回所需的最少操作次数。每次操作可以执行以下步骤:1.选择数组中最小的两个整数x和y。2.从数组中删除x和y。3.计算min(x,y)*2+max(x,y)......