华为OD机试-最多组合直角三角形个数-2022Q4 A卷-Py/Java/JS

题目描述

有N条线段,长度分别为a[1]-a[n]。
现要求你计算这N条线段最多可以组合成几个直角三角形。
每条线段只能使用一次,每个三角形包含三条线段。

输入描述
第一行输入一个正整数T(1<=T<=100),表示有T组测试数据.
对于每组测试数据,接下来有T行,
每行第一个正整数N,表示线段个数(3<=N<=20),接着是N个正整数,表示每条线段长度,(0

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

示例1:输入输出示例仅供调试,后台判题数据一般不包含示例
输入

1

7 3 4 5 6 5 12 13 
输出

2

Java 代码

import java.util.Scanner;
import java.util.*;
import java.util.stream.Collectors;
import java.math.BigInteger;
import java.util.stream.Stream;
 
class Main {
    public static ArrayList result = new ArrayList<>();
    public static ArrayList paths = new ArrayList<>();
	public static void main(String[] args) {
        // 处理输入
        Scanner in = new Scanner(System.in);
        // 处理输入
        int T = in.nextInt();
        for (int i=0;i

Python代码

import functools
import collections
import math
from itertools import combinations
from re import match
 
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
 
#并查集模板
class UF:
    def __init__(self, n=0):
        self.count = n
        self.item = [0 for x in range(n+1)]
        for i in range(n):
            self.item[i] = i
    def find(self, x):
        if (x != self.item[x]):
            self.item[x] = self.find(self.item[x])
            return 0
        return x
    
 
    def union_connect(self, x, y):
        x_item = self.find(x)
        y_item = self.find(y)
    
        if (x_item != y_item):
            self.item[y_item] = x_item
            self.count-=1
 
def dfs( lines, index):
    maxVal = 0
    a=0
    b=0
    c=0
    for i in range(index, len(lines)-2) :
        a = lines[i]
        if (a == 0):
            continue
        
        for j in range(i+1, len(lines)-1) :
            b = lines[j]
            if (b == 0):
                continue
            
            for k in range(j+1, len(lines)) :
                c = lines[k]
                if (c == 0):
                    continue
                
                if ((a*a + b*b) == c*c):
                    lines[i]=0
                    lines[j]=0
                    lines[k]=0
                    maxVal = max(maxVal, dfs(lines,i+1) +1)
                    lines[i]=a
                    lines[j]=b
                    lines[k]=c
    return maxVal
 
# 处理输入
n = int(input())
for i in range(n):
    #先进行去重
    params = [int(x) for x in input().split(" ")]
    N = params[0]
    nums = params[1:]
    nums.sort()
 
    print(dfs(nums, 0))

JS代码

function dfs(lines, index) {
    let maxVal = 0;
    let a, b, c;
    for (let i = index; i < lines.length-2; i++) {
        a = lines[i];
        if (a == 0) {
            continue;
        }
        for (let j = i+1; j < lines.length-1; j++) {
            b = lines[j];
            if (b == 0) {
                continue;
            }
            for (let k = j+1; k < lines.length; k++) {
                c = lines[k];
                if (c == 0) {
                    continue;
                }
                if ((a*a + b*b) == c*c) {
                    lines[i]=0;
                    lines[j]=0;
                    lines[k]=0;
                    maxVal = Math.max(maxVal, dfs(lines,i+1) +1);
                    lines[i]=a;
                    lines[j]=b;
                    lines[k]=c;
                };
            }
        }
    }
 
    return maxVal;
}
function main(params) {
 
    N = params[0]
    let nums = []
    for (let i=1;i

你可能感兴趣的:(java,算法,JavaScript,华为)