刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

37.一张长方形的纸,长m米,宽n米(长宽均为整数),现在要把它刚好裁成一些正方形(边长是整数),有几种裁法,如果要使裁得的正方形面积最大,可以裁多少块。小明学习了递归后,编写程序如下,首先输入长方形的长和宽,计算出结果。请完善划线处的代码:
def tj(a,b):
​ c = 0
​ minn = ①
​ if a > b:
​ minn = b
​ for i in range(1,minn+1):
​ if a % i == 0 and b % i == 0:
​ c = ②
​ return c
def gcd(a,b):
​ if b == 0:
​ return a
​ return ③
chang = int(input('输入长方形的长 (单位cm)'))
kuan = int(input('输入长方形的宽 (单位cm)'))
bianchang = gcd(chang,kuan)
total = ④
num = tj(chang,kuan)
print('------------结果如下-------------')
print('有{}种裁法'.format(num))
print('裁得的正方形面积最大边长是{}cm,可以裁{}块'.format(bianchang,total))
运行后的结果如下图所示:

使用微信搜索喵呜刷题,轻松应对考试!

答案:

1. ①处应填`min(a, b)`,表示取长和宽的最小值作为正方形的最大可能边长。2. ②处应填`c + (a // i) * (b // i)`,表示当前边长i下,可以裁出的正方形数量,累加到c上。3. ③处应填`gcd(b, a % b)`,表示求最大公约数,递归调用gcd函数。4. ④处应填`(chang * kuan) // (bianchang * bianchang)`,表示计算可以裁出的最大面积正方形的数量。

解析:

【喵呜刷题小喵解析】:

根据题目要求,需要完善划线处的代码。

1. ①处需要求长和宽的最小值,作为正方形的最大可能边长。因为长和宽中较小的那个值,就是能构成的最大正方形边长。所以填`min(a, b)`。

2. ②处需要计算当前边长i下,可以裁出的正方形数量。对于每个可能的边长i,需要判断长和宽是否能被i整除,如果能,就计算能裁出的正方形数量,累加到c上。公式为`c + (a // i) * (b // i)`,其中`a // i`和`b // i`分别表示长和宽能被i整除的部分数量,两者相乘就是能裁出的正方形数量。

3. ③处需要求最大公约数,递归调用gcd函数。因为最大公约数能表示长和宽的最大公约因子,也就是能构成的最大正方形的边长。

4. ④处需要计算可以裁出的最大面积正方形的数量。公式为`(chang * kuan) // (bianchang * bianchang)`,其中`chang * kuan`表示长方形的总面积,`bianchang * bianchang`表示最大面积正方形的面积,两者相除并取整就是能裁出的最大面积正方形的数量。
创作类型:
原创

本文链接:37.一张长方形的纸,长m米,宽n米(长宽均为整数),现在要把它刚好裁成一些正方形(边长是整数),有

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share