勾股定理

所属作业: hw4 算法: 循环

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 首先输入一个正整数n
n = int(input())  # 从用户输入获取一个正整数n,表示边的最大长度
sum = 0  # 初始化计数器,用于统计勾股数的组合数量

# 使用两个嵌套循环来遍历所有可能的边长a和b
for a in range(1, n + 1):  # a从1到n
    for b in range(a, n + 1):  # b从a到n,确保b >= a以避免重复组合
        for c in range(b, n + 1):
            # 检查是否满足勾股定理,并且确保c在合法范围内
            if c * c == a * a + b * b:
                sum += 1  # 如果满足条件,计数器加1

# 输出结果,显示满足条件的勾股数的组合数量
print(sum)

运行超时 Time Limit Exceeded

优化第三重循环

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#该题属于枚举算法
#首先输入一个正整数
n=int(input())
sum=0
for a in range (1,n+1):
    for b in range (a,n+1):#要考虑到大小问题,不然会造成重复组合
        c=(a*a + b*b)**0.5#用勾股定理来规定c以便于减少循环缩短时间
        if **c % 1 == 0** and b <= c and c <= n:#已知c为a、b、c中最大值所以c要小于等于n且因为c规定时开根号可能不为整数,所以用整除来限制
            sum+=1
print(sum)
1
2
3
# 判断一个数是不是整数
c.is_integer()
c % 1 == 0

用int(c) * int(c) == a * a + b * b判断

1
2
3
4
5
6
7
8
9
#首先输入一个正整数
n=int(input())
sum=0
for a in range (1,n+1):
    for b in range (a,n+1):
        c=int((a*a+b*b)**0.5)
        if **c*c==a*a+b*b** and b <= c and c <= n:
            sum+=1
print(sum)