Python 地板所需的最小瓷砖数量

Python 地板所需的最小瓷砖数量,python,Python,我开始学习如何用python编程,遇到了一个问题,我只能使用以下函数: 基本数学和逻辑运算符(+.-、*、/、/、/、%、**、=、=、=、!=、和、或、非) 数学模块中可用的任何函数和常量 最小值,最大值,绝对值 类型 len(用于字符串长度) int、str、float转换函数 圆的 我不是在寻找答案,只是想知道如何解决这个问题 该问题要求确定覆盖矩形房间地板所需的具有相同方向的相同瓷砖的最小数量。任何超出地板面积的瓷砖多余部分都将被丢弃,并且不能使用 重复使用。编写一个名为min_ti

我开始学习如何用python编程,遇到了一个问题,我只能使用以下函数:

  • 基本数学和逻辑运算符(+.-、*、/、/、/、%、**、=、=、=、!=、和、或、非)
  • 数学模块中可用的任何函数和常量 最小值,最大值,绝对值
  • 类型
  • len(用于字符串长度)
  • int、str、float转换函数
  • 圆的
我不是在寻找答案,只是想知道如何解决这个问题

该问题要求确定覆盖矩形房间地板所需的具有相同方向的相同瓷砖的最小数量。任何超出地板面积的瓷砖多余部分都将被丢弃,并且不能使用 重复使用。编写一个名为min_tiles的Python函数,该函数使用4个正整数:room_width、room_length、tile_width、tile_length,并生成 完全覆盖房间地板所需的最小瓷砖数量

以下是一些例子:

最小瓷砖(4,4,2,2)=>4

如果瓷砖为矩形,则它们只能朝向一个方向,而不能朝向另一个方向 二者都因此,如果地板是3 x 4,瓷砖是1 x 3,那么在一个方向上需要6块瓷砖才能覆盖地板(丢弃多余的碎片),但在另一个方向上,只需要4块瓷砖才能覆盖地板。在这种情况下,您应该生成最小值,即4。因此,最小瓷砖(3,4,1,3)=>4


提前谢谢

您将能够使用动态规划解决方案来解决此问题,但如果您对一般编程不熟悉,这将很困难。您可以假设,首先放置一个与地板角对齐的瓷砖(具有两个可能的方向),放置此瓷砖后,将创建两个较小矩形的子问题

您还知道,您可以使用带有
lxw
的一个平铺生成
n(l)xm(w)
n(w)xm(l)
矩形。我认为完全符合边界的最大(按面积)矩形将始终是解决方案的一部分。也许试着看看你是否能证明事实总是如此

def min_tiles_horizontal(room_width,room_length,tile_width,tile_length):
  return math.ceil(room_width / float(tile_width)) * math.ceil(room_length / float(tile_length))

def min_tiles(room_width,room_length,tile_width,tile_length):
  return min(
      min_tiles_horizontal(room_width,room_length,tile_width,tile_length),        
      min_tiles_horizontal(room_width,room_length,tile_length,tile_width))
min\u tiles\u horizontal
仅在瓷砖水平定向时计算所需的瓷砖数量。在
min\u tiles
中,我们调用
min\u tiles\u horizontal
两次-一次用于获取水平平铺的数字,一次用于获取垂直平铺的数字(我们通过切换
tile\u length
tile\u width
作为参数来获取此值),然后返回这两个数字中的最小值


float
用于进行浮点除法,例如,对于3/float(2),我们将得到1.5(不使用
float
我们将进行整数除法,得到1)
math.ceil
然后用于将数字四舍五入到最接近的较大数字,例如
math.ceil(2.1)
将为我们提供3,因为当您需要2.1个平铺时,您必须使用3。

。。。我没有足够的声誉来评论其他答案@Miloslav您的代码在
min_tiles(2,4,1,3)
上失败@Joran你的答案不能解释放弃多余的。我不确定我是否被允许使用动态规划。我们只允许使用问题中列出的函数。是的,我想我明白你在第二段中试图解释的,我会试试看。我不确定什么是允许的。动态规划意味着您存储了一些类似数组的值结构,但除了基本算术和min/max之外,您没有使用任何数学函数。我想知道您是否可以解释一下思考过程?我不知道你为什么用float和math.cell?我猜这是答案的一部分,我必须为vertical编写一个类似的函数?我不知道每个python版本是否不同,但我有3个,当我不使用float时,我仍然得到一个float,所以3/2仍然会给我1.5,所以我猜这部分代码是不必要的。是的,在Python3中,3/2==1.5,在Python2.7中,3/2==1。因此,您可以ommit float函数,但如果您将其保留在中,则它将在两个版本中都能工作。