2024华为OD机试:最多几个直角三角形

题目描述

有N条线段,长度分别为a[1]-a[n]。

现要求你计算这N条线段最多可以组合成几个直角三角形。每条线段只能使用一次,每个三角形包含三条线段。

输入描述

第一行输入一个正整数T(1<=T<=100),表示有T组测试数据.对于每组测试数据,接下来有T行,

每行第一个正整数N,表示线段个数(3<=N<=20),接着是N个正整数,表示每条线段长度,(0<a[]<100)。

输出描述

对于每组测试数据输出一行,每行包括一个整数,表示最多能组合的直角三角形个数

用例

输入
1
7 3 4 5 6 5 12 13
输出
2
说明
可以组成2个直角三角形(3,4,5)、(5,12,13)

输入
1
7 3 4 5 6 6 12 13
输出
1
说明
可以组成1个直角三角形(3,4,5) 或 (5,12,13),5只能用一次

Python实现

这段代码是一个递归算法,用于解决一个数学问题:给定一组正整数,求出其中能组成直角三角形的三个数的最大个数。

算法的基本思路是,首先将给定的数字从小到大排序,然后枚举每个数字作为直角三角形的其中一边,再枚举剩下的数字作为直角三角形的另外两边,如果这三个数字满足勾股定理,则将这三个数字标记为已使用,并继续枚举下一个数字。

算法的具体实现如下:

  1. 定义一个函数 dfs,其中 case 是给定的数字列表,used 是一个布尔列表,表示每个数字是否已被使用,index 是当前正在枚举的数字的下标。
  2. dfs 函数中,首先使用一个 for 循环枚举当前正在枚举的数字 i,如果 i 对应的数字已被使用,则跳过。
  3. 然后使用另一个 for 循环枚举比 i 大的数字 j,如果 j 对应的数字已被使用,则跳过。
  4. 再使用另一个 for 循环枚举比 j 大的数字 k,如果 k 对应的数字已被使用,则跳过。
  5. 如果 ijk 对应的数字满足勾股定理,则将这三个数字标记为已使用,并递归调用 dfs 函数,将 index 设置为 i+1,表示从下一个数字开始枚举。
  6. 在递归调用 dfs 函数后,将 ijk 对应的数字标记为未使用。
  7. 返回 dfs 函数的返回值,表示能组成直角三角形的三个数的最大个数。

在主程序中,首先读取测试用例的数量,然后依次处理每个测试用例。对于每个测试用例,首先读取线段的个数和线段的长度,然后将线段的长度从小到大排序,最后调用 dfs 函数计算能组成直角三角形的三个数的最大个数,并输出结果。


def dfs(case, used, index):ans = 0for i in range(index, len(case)-2):# 如果标记为使用过了,就跳过if used[i]:continuefor j in range(i+1, len(case)-1):if used[j]:continuefor k in range(j+1, len(case)):if used[k]:continue# case排好序的。if case[i]**2 + case[j]**2  ==case[k]**2:# 三个数都标记为使用过了。used[i]=Trueused[j]=Trueused[k]=True# 递归,这里统计的是个数,所以要加上现在的呀。ans = max(ans, dfs(case, used, i+1) + 1)# 回溯一波used[i]=Falseused[j]=Falseused[k]=Falsereturn ansnum_test_cases = int(input())
for _ in range(num_test_cases):# 读取线段个数和线段长度segments = [int(x) for x in input().split()]segments.pop(0)max = dfs(segments, [False]*len(segments), 0)print(max)

c++实现

#include <iostream>
#include <vector>
#include <algorithm>using namespace std;int dfs(vector<int> &segments, vector<bool> &used, int index) {int ans = 0;for (int i = index; i < segments.size() - 2; i++) {if (used[i]) continue;for (int j = i + 1; j < segments.size() - 1; j++) {if (used[j]) continue;for (int k = j + 1; k < segments.size(); k++) {if (used[k]) continue;if (segments[i] * segments[i] + segments[j] * segments[j] == segments[k] * segments[k]) {used[i] = true;used[j] = true;used[k] = true;ans = max(ans, dfs(segments, used, i + 1) + 1);used[i] = false;used[j] = false;used[k] = false;}}}}return ans;
}int main() {int num_test_cases;cin >> num_test_cases;bool first=false;while (num_test_cases --) {int num_segments;cin >> num_segments;vector<int> segments(num_segments);for (int i = 0; i < num_segments; i++) {cin >> segments[i];}vector<bool> used(num_segments, false);int max = dfs(segments, used, 0);cout << max<<endl;}return 0;
}
``

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/606960.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件测试|SQL中的UNION和UNION ALL详解

简介 在SQL&#xff08;结构化查询语言&#xff09;中&#xff0c;UNION和UNION ALL是用于合并查询结果集的两个关键字。它们在数据库查询中非常常用&#xff0c;但它们之间有一些重要的区别。在本文中&#xff0c;我们将深入探讨UNION和UNION ALL的含义、用法以及它们之间的区…

Ubuntu 22.04 编译安装 Qt mysql驱动

参考自 Ubuntu20.04.3 QT5.15.2 MySQL驱动编译 Ubuntu 18.04 编译安装 Qt mysql驱动 下边这篇博客不是主要参考的, 但是似乎解决了我的难题(找不到 libmysqlclient.so) ubuntu18.04.2 LTS 系统关于Qt5.12.3 无法加载mysql驱动&#xff0c;需要重新编译MYSQL数据库驱动的问题以…

【代码随想录】刷题笔记Day45

前言 早上又赖了会床......早睡早起是奢望了现在&#xff0c;新一年不能这样&#xff01;支棱起来&#xff01; 377. 组合总和 Ⅳ - 力扣&#xff08;LeetCode&#xff09; 这一题用的就是完全背包排列数的遍历顺序&#xff1a;先背包再物品&#xff0c;从前往后求的也是有几…

IO类day01

File类 File类的每一个实例可以表示硬盘(文件系统)中的一个文件或目录(实际上表示的是一个抽象路径) 使用File可以做到: 1:访问其表示的文件或目录的属性信息,例如:名字,大小,修改时间等等 2:创建和删除文件或目录 3:访问一个目录中的子项 但是File不能访问文件数据. pu…

mac电脑php命令如何设置默认的php版本

前提条件&#xff1a;如果mac电脑还没安装多个PHP版本&#xff0c;可以先看这篇安装一下 mac电脑运行多个php版本_mac 同时运行两个php-CSDN博客 第一部分&#xff1a;简单总结 #先解除现在默认的php版本 brew unlink php7.4#再设置的想要设置的php版本 brew link php8.1第二部…

AWS Simple Email Service (SES) 实战指南

Amazon Simple Email Service (SES) 是一项强大的电子邮件发送服务&#xff0c;适用于数字营销、应用程序通知以及事务性邮件。在这个实战指南中&#xff0c;我们将演示如何设置 AWS SES 并通过几个示例展示其用法。 设置 AWS SES 1. 创建 AWS 账户 首先&#xff0c;您需要创…

c++学习:容器list实战(获取目录返回容器list)

新建一个dir.h,声明dir类 #ifndef DIR_H #define DIR_H#include <sys/types.h>#include <dirent.h> #include <stdio.h> #include <string.h>#include <iostream> #include <list>class Dir { public:Dir();static std::list<std::str…

Java20:反射

1. 概念2. 获取成员变量2.1 获取public修饰的成员变量2.2 获取已声明的属性 3.获取方法3.1 获取public修饰的&#xff0c;和继承自父类的 方法3.2 获取本类中定义的方法 4. 获取构造器4.1 获取所有public修饰的构造器4.2 获取本类中定义的构造器 5.jdk文件分析5.1bin目录&#…

CodeGPT,你的智能编码助手—CSDN出品

CodeGPT是由CSDN打造的一款生成式AI产品&#xff0c;专为开发者量身定制。 无论是在学习新技术还是在实际工作中遇到的各类计算机和开发难题&#xff0c;CodeGPT都能提供强大的支持。其涵盖的功能包括代码优化、续写、解释、提问等&#xff0c;还能生成精准的注释和创作相关内…

Git、GitHub、Gitee 和 GitLab的区别和使用方法

介绍 Git Git 是一个免费的、开源的分布式版本控制系统&#xff0c;用于快速高效地处理各种项目。它有本地库、暂存区域和多个工作流分支等特性。你可以在本地使用它管理代码&#xff0c;无需联网。 GitHub GitHub 是一个基于 Git 实现的在线代码仓库&#xff0c;是全球最大…

spring-cloud-starter-alibaba-nacos-config 2022.0 连接 nacos 2.3.0 失败处理

版本 spring-cloud-starter-alibaba-nacos-config: 2022.0.0.0 nacos-server 2.3.0 服务器连接失败 报错&#xff1a; Server check fail, please check server xxx.xxx.xxx.xxx ,port 9848 is available , error {} nacos 2.x 除了主端口(默认为8848)以外新增了三个端口需要…

redis 的安装

目录 关系数据库与非关系型数据库 关系型数据库 非关系型数据库 关系型数据库和非关系型数据库区别 非关系型数据库产生背景 总结 Redis概述 Redis 具有以下几个优点 使用场景 哪些数据适合放入缓存中 Redis为什么这么快 Redis 安装部署 Redis 命令工具 Redis 数…

Vue选择年的组件

代码&#xff1a; <div class"block"><span class"demonstration">年</span><el-date-pickerv-model"value3"type"year"placeholder"选择年"></el-date-picker> </div><script>…

win11 如何切换用户?

第1步&#xff1a;打开其他用户 第2步&#xff1a;添加账户 第3步&#xff1a; 使用新用户登录

鉴源论坛 · 观模丨浅谈Web渗透之信息收集(下)

作者 | 林海文 上海控安可信软件创新研究院汽车网络安全组 版块 | 鉴源论坛 观模 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 信息收集在渗透测试过程中是最重要的一环&#xff0c;“浅谈web渗透之信息收集”将通过上下两篇&#xff0c;对信息收集、…

Linux文件系统和日志分析

一、inode表结构 1. inode表 inode号在同一个设备上是唯一的。 inode号是有限资源&#xff0c;它的大小和磁盘大小有关。 访问文件的基本流程 根据文件夹的文件名和inode号的关系找到对应的inode表&#xff0c;再根据inode表&#xff08;属主 属组&#xff09;当中的指针找到磁…

基于STM32和MPU6050的自平衡小车设计与实现

基于STM32和MPU6050的自平衡小车设计和实现是一个有趣而具有挑战性的项目。在本文中&#xff0c;我们将介绍如何利用STM32微控制器和MPU6050传感器实现自平衡小车&#xff0c;并提供相应的代码示例。 1. 硬件设计 自平衡小车的核心硬件包括STM32微控制器、MPU6050传感器以及电…

【Spring 篇】深入浅出:用Spring注解开发的奇妙之旅

在编程的世界里&#xff0c;Spring框架如同一位慈祥的导师&#xff0c;为我们打开了无尽可能性的大门。而在Spring的广袤领域中&#xff0c;注解是我们最亲密的伙伴之一。本篇博客将深入浅出地介绍使用Spring注解进行开发的奇妙之旅&#xff0c;为你解开注解的神秘面纱。 前奏…

【读书笔记】《白帽子讲web安全》跨站脚本攻击

目录 前言&#xff1a; 第二篇 客户端脚本安全 第3章 跨站脚本攻击&#xff08;XSS&#xff09; 3.1XSS简介 3.2XSS攻击进阶 3.2.1初探XSS Payload 3.2.2强大的XSS Payload 3.2.2.1 构造GET与POST请求 3.2.2.2XSS钓鱼 3.2.2.3识别用户浏览器 3.2.2.4识别用户安装的软…

Qt 使用WINDOWS API读取SMBIOS信息,并通过CMD命令打印相关信息,参考DumpSMBIOS项目

在获取PE系统中的CPU、主板、内存信息时&#xff0c;发现使用WMI部分信息无法获取&#xff0c;通过gitGub上的DumpSMBIOS完全解决了这个问题&#xff0c;并单独做成了个案例&#xff0c;以下示例和代码都是参考DumpSMBIOS项目 SMBIOS这个数据还是用到的比较少。但是DumpSMBIOS项…