📅  最后修改于: 2023-12-03 15:37:08.738000             🧑  作者: Mango
在一张纸上,可以从中切出多个矩形。但是,若限定矩形的最大大小,那么我们该如何切出最大的矩形呢?
给定一张纸的大小和要求矩形的大小,求这张纸上最大的可切出的矩形的面积。
假设给定的纸的大小为 $m \times n$,要求的矩形大小为 $a \times b$。
若 $m \times n<a \times b$,则无法切出该矩形。
若 $m \times n=a \times b$,则最大矩形的面积为 $m \times n$。
若 $m \times n>a \times b$,则最大矩形的面积为 $a \times b$。
所以,我们只需判断两个矩形之间的大小关系,即可求出最大矩形的面积。
def max_rect(paper_size, rect_size):
"""
给定一张纸的大小和要求矩形的大小,返回这张纸上最大的可切出的矩形的面积。
Args:
paper_size: tuple of (int, int),表示纸的大小,如 (10, 20)
rect_size: tuple of (int, int),表示要求的矩形大小,如 (3, 4)
Returns:
int,表示最大矩形的面积
Raises:
ValueError,若参数类型不正确或大小关系不合法
"""
if type(paper_size) is not tuple or type(rect_size) is not tuple:
raise ValueError('参数类型不正确')
if len(paper_size) != 2 or len(rect_size) != 2 or not all(isinstance(x, int) for x in paper_size + rect_size):
raise ValueError('参数类型不正确')
if paper_size[0] * paper_size[1] < rect_size[0] * rect_size[1]:
raise ValueError('大小关系不合法')
if paper_size[0] * paper_size[1] == rect_size[0] * rect_size[1]:
return paper_size[0] * paper_size[1]
return rect_size[0] * rect_size[1]
print(max_rect((10, 20), (3, 4))) # 12
print(max_rect((10, 20), (30, 40))) # ValueError: 大小关系不合法