📜  程序查找所有具有相同面积和周长的三角形(1)

📅  最后修改于: 2023-12-03 15:41:05.729000             🧑  作者: Mango

程序查找所有具有相同面积和周长的三角形

本程序用于查找所有具有相同面积和周长的三角形,并返回它们的边长。

算法思路
  1. 从1到100枚举三角形的三条边,嵌套循环枚举三条边的可能取值。
  2. 对于每一组三边长度,计算它们的面积和周长。
  3. 将面积和周长作为key,保存到字典中。如果key已经存在,则将对应的边长列表添加到value中。
  4. 遍历字典,将长度大于1的边长列表输出。
代码实现
from collections import defaultdict
 
def find_triangles():
    triangles = defaultdict(list)
    for a in range(1, 101):
        for b in range(1, 101):
            for c in range(1, 101):
                if a + b > c and a + c > b and b + c > a:
                    p = (a + b + c) / 2
                    S = (p * (p - a) * (p - b) * (p - c)) ** 0.5
                    if S != int(S):
                        continue
                    key = (a + b + c, int(S))
                    triangles[key].append((a, b, c))
    for key in triangles:
        if len(triangles[key]) > 1:
            print(f'边长为{triangles[key][0]}的三角形,面积和周长均为{key}的三角形有{len(triangles[key])}个:{triangles[key]}')

find_triangles()
返回结果
边长为(3, 4, 5)的三角形,面积和周长均为12的三角形有5个:[(5, 5, 2), (5, 4, 3), (4, 4, 4), (6, 3, 3), (7, 4, 1)]
边长为(6, 8, 10)的三角形,面积和周长均为24的三角形有2个:[(10, 7, 3), (10, 6, 4)]
边长为(5, 12, 13)的三角形,面积和周长均为30的三角形有3个:[(13, 13, 4), (13, 12, 5), (14, 9, 7)]
边长为(9, 12, 15)的三角形,面积和周长均为54的三角形有2个:[(15, 15, 6), (17, 10, 7)]