求编写Python程序:找出指定面积的整数边长矩形与直角三角形并输出周长
解决方案:找出指定面积的整数边长矩形与直角三角形
一、问题拆解
1. 矩形的逻辑
- 面积公式:
S = a * b(a、b为正整数,a ≤ b,避免重复解) - 周长公式:
周长 = 2*(a + b) - 遍历思路:从1到
√S遍历a,若S % a == 0,则b = S // a,得到一组有效边长。
2. 直角三角形的逻辑
- 面积公式:
S = (a * b)/2(a、b为直角边,正整数),变形得a*b = 2S - 需满足勾股定理:斜边
c = √(a² + b²)必须为整数 - 周长公式:
周长 = a + b + c - 遍历思路:从1到
√(2S)遍历a,若2S % a == 0,则b = (2S) // a,验证a² + b²是否为完全平方数,且a ≤ b。
二、完整代码实现
import math from tabulate import tabulate def find_rectangles(target_area): rectangles = [] for a in range(1, int(math.isqrt(target_area)) + 1): if target_area % a == 0: b = target_area // a perimeter = 2 * (a + b) rectangles.append(["矩形", f"{a}×{b}", perimeter]) return rectangles def find_right_triangles(target_area): triangles = [] double_area = 2 * target_area for a in range(1, int(math.isqrt(double_area)) + 1): if double_area % a == 0: b = double_area // a c_squared = a**2 + b**2 c = math.isqrt(c_squared) if c * c == c_squared: if a > b: a, b = b, a perimeter = a + b + c triangles.append(["直角三角形", f"{a}, {b}, {c}", perimeter]) return triangles if __name__ == "__main__": while True: try: target_area = int(input("请输入目标面积(正整数):")) if target_area <= 0: print("请输入正整数!") continue break except ValueError: print("输入无效,请输入正整数!") rect_results = find_rectangles(target_area) tri_results = find_right_triangles(target_area) all_results = rect_results + tri_results if all_results: print("\n符合条件的图形列表:") print(tabulate(all_results, headers=["图形类型", "边长", "周长"], tablefmt="grid")) else: print(f"没有找到面积为{target_area}的整数边长矩形或直角三角形。")
三、代码说明
- 依赖安装:代码用到
tabulate库格式化表格,执行前先安装:pip install tabulate - 去重处理:矩形和三角形都通过
a ≤ b的限制避免重复解(比如2×3和3×2视为同一个矩形) - 输入验证:确保用户输入的是正整数,避免无效值报错
- 完全平方数验证:用
math.isqrt计算整数平方根,再平方比对,判断斜边是否为整数
四、示例运行
假设输入面积为6:
- 矩形解:1×6(周长14)、2×3(周长10)
- 直角三角形解:3,4,5(面积(3×4)/2=6,周长12)
输出表格会清晰展示这些结果。
内容的提问来源于stack exchange,提问作者조용재
相关产品推荐
相关产品推荐

