鱼C论坛

 找回密码
 立即注册
查看: 1015|回复: 2

[已解决]请问一个矩形内可以放N*M个小矩形,怎么写算法呀

[复制链接]
发表于 2023-4-23 22:07:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 hahadaxiao 于 2023-4-23 22:09 编辑

假设有一个880mm*590mm的矩形(A),自定义一个N*M的矩形(B),每个矩形B中间间隔5mm
(1)矩形A里面可以摆放多少个矩形B?
(2)如果矩形B可以旋转90度,也就是说,N*M,还是M*N的矩形可以摆放数量最多
最佳答案
2023-4-23 22:27:57
要计算矩形A中可以放置多少个矩形B,我们需要将矩形A的长和宽分别减去间隔,然后除以矩形B的长和宽。在这个问题中,间隔为5mm。我们可以使用如下算法来计算:
def calculate_max_rectangles(a_width, a_height, b_width, b_height, gap):
    effective_a_width = a_width - gap
    effective_a_height = a_height - gap

    horizontal_count = (effective_a_width // (b_width + gap)) * (effective_a_height // (b_height + gap))
    vertical_count = (effective_a_width // (b_height + gap)) * (effective_a_height // (b_width + gap))

    return max(horizontal_count, vertical_count)

a_width = 880
a_height = 590
b_width = 0  # 请替换为实际的矩形B宽度
b_height = 0  # 请替换为实际的矩形B高度
gap = 5

max_rectangles = calculate_max_rectangles(a_width, a_height, b_width, b_height, gap)
print("最多可以摆放矩形B的数量:", max_rectangles)

请将`b_width`和`b_height`替换为实际的矩形B的宽度和高度。这个算法会返回两种摆放方式(横向和纵向)下的最大矩形B数量。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-23 22:21:35 | 显示全部楼层
假设n、m为矩形b的长和宽,经过每个矩形b之间5mm的间隔,则每个矩形b所占的实际宽度为n+5mm,所占的实际长度为m+5mm。

## part 1:矩形b不旋转

在这种情况下,只需将矩形b横向或纵向放置都可。因此可以算出在矩形a中,横向能放置的矩形b的最大数量为:

$$
floor(\frac{880mm}{n+5mm}) * floor(\frac{590mm}{m+5mm})
$$

其中 $floor$ 表示向下取整,同理,纵向能放置的矩形b的最大数量为:

$$
floor(\frac{880mm}{m+5mm}) * floor(\frac{590mm}{n+5mm})
$$

需要注意的是,在实际中选择直接扣除 5mm 来计算会存在一些边角问题,可以采用等效求解的方法,将 880mm和 590mm分别减去两侧间隔总和 (n-1)\times5mm 和 (m-1)\times5mm 后再计算即可。

## part 2:矩形b可旋转

在这种情况下,矩形b分为两种摆法:横向、纵向。 需要分两种情况来计算:

#### case 1: n <= m

* 纵向方案:每个矩形b所占宽度为 $n+5mm$ , 长度为 $m+5mm$,则横向能放置的数量为:


floor(\frac{880mm}{n+5mm}) * floor(\frac{590mm}{m+5mm})


* 横向方案:每个矩形b所占宽度为 $m+5mm$ , 长度为 $n+5mm$,则横向能放置的数量为:


floor({880mm}{m+5mm}) * floor(\frac{590mm}{n+5mm})


在这两种情况下,取数量最大值即为可摆放的最多矩形b数量。

#### case 2: n > m

* 纵向方案:每个矩形b所占宽度为 $n+5mm$ , 长度为 $m+5mm$,则横向能放置的数量为:


floor({880mm}{n+5mm}) * floor(\frac{590mm}{m+5mm})


* 横向方案:每个矩形b所占宽度为 $m+5mm$ , 长度为 $n+5mm$,则横向能放置的数量为:


floor(\frac{880mm}{m+5mm}) * floor(\frac{590mm}{n+5mm})


同样地,在这两种情况下,取数量最大值即为可摆放的最多矩形b数量。

需要注意的是,这里的长度和宽度是指矩形b在摆放时所占据的空间大小,而不是矩形本身的长和宽。同时,也需要考虑实际问题中可能存在的边角误差,使得计算与实际布局更加接近。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-23 22:27:57 | 显示全部楼层    本楼为最佳答案   
要计算矩形A中可以放置多少个矩形B,我们需要将矩形A的长和宽分别减去间隔,然后除以矩形B的长和宽。在这个问题中,间隔为5mm。我们可以使用如下算法来计算:
def calculate_max_rectangles(a_width, a_height, b_width, b_height, gap):
    effective_a_width = a_width - gap
    effective_a_height = a_height - gap

    horizontal_count = (effective_a_width // (b_width + gap)) * (effective_a_height // (b_height + gap))
    vertical_count = (effective_a_width // (b_height + gap)) * (effective_a_height // (b_width + gap))

    return max(horizontal_count, vertical_count)

a_width = 880
a_height = 590
b_width = 0  # 请替换为实际的矩形B宽度
b_height = 0  # 请替换为实际的矩形B高度
gap = 5

max_rectangles = calculate_max_rectangles(a_width, a_height, b_width, b_height, gap)
print("最多可以摆放矩形B的数量:", max_rectangles)

请将`b_width`和`b_height`替换为实际的矩形B的宽度和高度。这个算法会返回两种摆放方式(横向和纵向)下的最大矩形B数量。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 18:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表