有 条线段,长度分别为 。
现要求你计算这 条线段最多可以组合成几个直角三角形。
每条线段只能使用一次,每个三角形包含三条线段。
第一行输入一个正整数 ,表示有 组测试数据.
对于每组测试数据,接下来有行,
每行第一个正整数 ,表示线段个数 ,接着是 个正整数,表示每条线段长度,。
对于每组测试数据输出一行,每行包括一个整数,表示最多能组合的直角三角形个数
1
7 3 4 5 6 5 12 13
2
可以组成2个直角三角形(3,4,5)、(5,12,13)
#include <stdio.h>
#include <stdlib.h>
int count_right_triangles(int N, int* segments) {
qsort(segments, N, sizeof(int), (int (*)(const void*, const void*)) -&);
int count = 0;
for (int i = 0; i < N; i++) {
for (int j = i + 1; j < N; j++) {
for (int k = j + 1; k < N; k++) {
int a = segments[i], b = segments[j], c = segments[k];
if (a * a + b * b == c * c) {
count++;
}
}
}
}
return count;
}
int main() {
int T;
scanf("%d", &T);
for (int t = 0; t < T; t++) {
int N;
scanf("%d", &N);
int segments[N];
for (int i = 0; i < N; i++) {
scanf("%d", &segments[i]);
}
printf("%d\n", count_right_triangles(N, segments));
}
return 0;
}
#include <iostream>
#include <vector>
#include <algorithm>
int count_right_triangles(int N, std::vector<int>& segments) {
std::sort(segments.begin(), segments.end());
int count = 0;
for (int i = 0; i < N; i++) {
for (int j = i + 1; j < N; j++) {
for (int k = j + 1; k < N; k++) {
int a = segments[i], b = segments[j], c = segments[k];
if (a * a + b * b == c * c) {
count++;
}
}
}
}
return count;
}
int main() {
int T;
std::cin >> T;
for (int t = 0; t < T; t++) {
int N;
std::cin >> N;
std::vector<int> segments(N);
for (int i = 0; i < N; i++) {
std::cin >> segments[i];
}
std::cout << count_right_triangles(N, segments) << std::endl;
}
return 0;
}
package com.amoscloud.nowcoder.refactor.t0251_0260;
import java.util.*;
/**
* Created with IntelliJ IDEA.
*
* @Author: Amos
* @E-mail: amos@amoscloud.com
* @Date: 2023/8/16
* @Time: 14:07
* @Description:
*/
public class Main0260 {
public static int count_right_triangles(int N, int[] segments) {
Arrays.sort(segments);
int count = 0;
Set<String> used = new HashSet<>();
for (int i = 0; i < N; i++) {
for (int j = i + 1; j < N; j++) {
for (int k = j + 1; k < N; k++) {
int a = segments[i], b = segments[j], c = segments[k];
String combo = a + "," + b + "," + c;
if (used.contains(combo)) continue;
if (a * a + b * b == c * c) {
count++;
used.add(combo);
}
}
}
}
return count;
}
public static void main(String[] args) {
try (Scanner scanner = new Scanner(System.in)) {
int T = scanner.nextInt();
for (int t = 0; t < T; t++) {
int N = scanner.nextInt();
int[] segments = new int[N];
for (int i = 0; i < N; i++) {
segments[i] = scanner.nextInt();
}
System.out.println(count_right_triangles(N, segments));
}
}
}
}
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created with IntelliJ IDEA.
File: main0260.py
Author: Amos
E-mail: amos@amoscloud.com
Date: 2023/8/16
Time: 14:04
Description:
"""
def count_right_triangles(N, segments):
segments.sort()
count = 0
used = set()
for i in range(N):
for j in range(i + 1, N):
for k in range(j + 1, N):
a, b, c = segments[i], segments[j], segments[k]
if (a, b, c) in used:
continue
if a * a + b * b == c * c:
count += 1
used.add((a, b, c))
return count
T = int(input())
for _ in range(T):
data = list(map(int, input().split()))
N = data[0]
segments = data[1:]
print(count_right_triangles(N, segments))