如何在华为OD机试中获得满分?Java实现【勾股数元组】一文详解!

news/2024/11/24 14:01:17/

请添加图片描述

✅创作者:陈书予
🎉个人主页:陈书予的个人主页
🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区
🌟专栏地址: Java华为OD机试真题(2022&2023)

文章目录

  • 1. 题目描述
  • 2. 输入描述
  • 3. 输出描述
  • 4. Java算法源码
  • 5. 测试
  • 6.解题思路

1. 题目描述

如果三个正整数A、B、C ,A²+B²=C²则为勾股数 如果ABC之间两两互质,即A与B,A与C,B与C均互质没有公约数, 则称
其为勾股数元组。 请求出给定n~m范围内所有的勾股数元组。

2. 输入描述

起始范围 1 < n < 10000 n < m < 10000

1
20

3. 输出描述

ABC保证A<B<C 输出格式A B C 多组勾股数元组,按照A B C升序的排序方式输出。 若给定范围内,找不到勾股数元组时,输出Na。

3 4 5
5 12 13
8 15 17

4. Java算法源码

public static void main(String[] args) {Scanner sc = new Scanner(System.in);int a = sc.nextInt();int b = sc.nextInt();List<List<Integer>> lists = new ArrayList<>();for (int i = a; i <= b; i++) {for (int j = i + 1; j <= b; j++) {if (check1(i, j, b)) {List<Integer> list = new ArrayList<Integer>();list.add(i);list.add(j);list.add((int) Math.sqrt(i * i + j * j));Collections.sort(list);lists.add(list);}}}int idx = 0;while (idx < lists.size()) {List<Integer> list = lists.get(idx);if (check2(list.get(0), list.get(1), list.get(2))) {lists.remove(idx);idx = 0;}idx++;}for (List<Integer> list : lists) {System.out.println(list.get(0) + " " + list.get(1) + " " + list.get(2));}
}private static boolean check1(int a, int b, int max) {int mul = a * a + b * b;double res = Math.sqrt(mul);int sub = (int) res;return res * res == sub * sub && sub <= max && sub > b;
}private static boolean check2(int a, int b, int c) {for (int i = 2; i < c; i++) {if (a % i == 0 && b % i == 0) {return true;} else if (a % i == 0 && c % i == 0) {return true;} else if (b % i == 0 && c % i == 0) {return true;}}return false;
}

5. 测试

在这里插入图片描述

6.解题思路

题目要求找出给定范围内的所有勾股数元组,其中勾股数元组满足条件:三个正整数A、B、C,满足A² + B² = C²,并且A、B、C两两互质(没有公约数)。

算法流程:

  1. 读取输入的起始范围,记为n和m。
  2. 创建一个列表lists,用于保存找到的勾股数元组。
  3. 遍历范围n到m之间的所有整数,记当前整数为i:
    • 在范围[i+1, m]内遍历所有整数,记当前整数为j:
      • 若满足check1(i, j, m),即i、j、(i²+j²)的平方根均为整数且不超过m,满足勾股数的条件:
        • 创建一个列表list,将i、j和(i²+j²)的平方根按升序添加到list中。
        • list添加到lists中。
  4. 遍历lists,记当前元组索引为idx:
    • 若满足check2(list.get(0), list.get(1), list.get(2)),即元组中的三个数存在公约数:
      • lists中移除当前元组。
      • idx重置为0。
    • 否则,递增idx
  5. 遍历结束后,输出剩余的lists中的元组。
    在这里插入图片描述

http://www.ppmy.cn/news/99422.html

相关文章

图及其应用

文章目录 图定义存储结构邻接矩阵邻接表 遍历深度优先搜索广度优先搜索 应用最小生成树构造最小生成树(**M**inimum **S**panning **T**ree&#xff0c;简称MST) 最短路径拓扑排序拓扑排序的方法 关键路径 图 定义 多对多的关系。 无向图&#xff1a;每条边都没有方向 有向…

你知道ChatGPT里面的G、P、T分别代表什么吗?

生成式AI&#xff0c; 在学习归纳数据分布的基础上&#xff0c;创造数据中不存在的新内容。可以生成文本、图片、代码、语音合成、视频和3D模型。 比尔盖茨&#xff1a;ChatGPT是1980年以来最具革命性的科技进步。 身处这个AI变革的时代&#xff0c;唯有躬身入局&#xff0c;…

ARM体系结构与异常处理

目录 一、ARM体系架构 1、ARM公司概述 ARM的含义 ARM公司 2.ARM产品系列 3.指令、指令集 指令 指令集 ARM指令集 ARM指令集 Thumb指令集 &#xff08;属于ARM指令集&#xff09; 4.编译原理 5.ARM数据类型 字节序 大端对齐 小端对齐 …

Web基础 ( 七 ) 变量

4.3.变量实例及内置对象 4.3.1.string 字符串 // string var a "abc" console.log( typeof(a) ) //stringvar b efg console.log( typeof b ) //stringvar c a>b console.log( c ) // 字符串比较按字母顺序console.log("abc\nefg") // \n 转义…

Wails + Go 实现图形化桌面应用

效果展示 编写一个热点查看程序&#xff0c;包含百度热搜、微博热搜、头条、知乎等&#xff0c;废话不说上效果图&#xff1a; 效果图1&#xff1a; 效果图2 打包大小 涉及技术点 Golang 使用golang 1.9 编写代码 Wails vue3 使用Wails技术实现GUI渲染&#xff0c;页…

Session(二)-- HttpSession的原理

目录 1. Session的原理 2. session什么时候被销毁? 3. session对于数据存储的注意事项: 1. Session的原理 HttpSession,它虽然是服务端会话管理技术的对象,但它

掌握成本核算的关键指南:《SAP Press - Introducing Product Costing with SAP S4HANA》

概览&#xff1a; 本书从介绍SAP S4HANA系统的基础知识开始&#xff0c;然后重点关注产品成本核算模块。读者将了解产品成本核算的重要性以及它在企业中的应用。通过清晰的解释、实例和图表&#xff0c;本书详细介绍了成本构成、成本对象、成本计算方法等关键概念。此外&#x…

函数指针和函数指针数组

//void Print(const char* str) //{ // printf("%s\n", str); //} //int main() //{ // (*(void(*)())0)();//将0地址处的函数强制转换位无类型的函数指针&#xff0c;解引用并调用 // void(*p)(const char*) Print; // void(*signal(int, void(*)(int)…