所属作业: 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)
|