给定一个宽度和高度的矩形,用n个正方形填充它(n是整数,也给出),这样正方形覆盖尽可能多的矩形区域。 应返回单个正方形的大小。
想法?
答案 0 :(得分:6)
正方形不一定必须与较大的矩形相同。这些问题被称为包装问题,找到最佳解决方案是非常困难的。
对于n
正方形包装的较大形状为正方形的情况下的优秀处理,请参阅Erich Friedman的论文Packing Unit Squares in Squares:
A Survey and New Results
例如,哥德尔是第一个发表这个主题的人。他发现a2 + a + 3 +(a-1)√2个正方形可以通过在45度角放置一条斜条形正方形来包装在a + 1 + 1 /√2的正方形中。例如,
为了好玩,我强烈建议您查看Erich's Packing Center。
答案 1 :(得分:1)
假设所有的方块都是对齐的并且它们的大小相同,你可以通过在方块的边长上进行二进制搜索来找到它:
import math
def best_square(w, h, n):
hi, lo = float(max(w, h)), 0.0
while abs(hi - lo) > 0.000001:
mid = (lo+hi)/2.0
midval = math.floor(w / mid) * math.floor(h / mid)
if midval >= n:
lo = mid
elif midval < n:
hi = mid
return min(w/math.floor(w/lo), h/math.floor(h/lo))
答案 2 :(得分:1)
我知道这个问题是很久以前的事了,但这就是我的意思:
你有n个方格 你有一个矩形 你想知道填充矩形的正方形的大小例如:
rectangle of 1280*720 filled with 100 squares.
The surface is 1280*720=921600
1 square should have the surface of 921600/100 = 9216
so the square size is sqrt(9216)=96
最后它只是一个返回结果的函数:
sqrt((width*height)/n)
答案 3 :(得分:0)
这是我的解决方案 这个想法是继续循环 假设你从square_counter = 0开始
长度和呼吸: //找到最大可能的方块
Count1 =长度/呼吸//发言
Square_counted + = count1
新平衡长度=长度 - 计数1 *呼吸
现在正方形,最大尺寸可能是呼吸
Count2 =呼吸/长度
Square_count + = count2
呼吸=呼吸 - 计数*长度