我可以用蛮力来实现它。但它太长了。
这项任务的优选算法是什么?
谢谢!
答案 0 :(得分:1)
如果我们做出2个假设(否则存在组合),这个问题只有解决方案
1)最小的方块有固定的尺寸
2)切割大正方形的方法也是固定的,就好像你将正方形放入一个网格中,这些网格的线条被小方块的大小分开。
还有第三个假设可以使问题更容易
3)大方块的侧面比小方块大K倍。 K是整数。
如果两个假设都是真的,我们可以继续:
找出N(N个整数)最小正方形的数量:尺寸为N *小尺寸的正方形
if ((big-size % N*small-size)==0)
Number += (big-size / N*small-size)^2
else
Number += ((big-size / N*small-size)^2) * (big-size % N*small-size)
否则条件中的*(大尺寸%N 小尺寸)是因为如果bigsquare没有被N划分,当用gid-width宽度“磨”大方块时,我们将剩下“分数部分”。这样我们就可以再次开始分割(再次进行分割),但偏移量为1,2或N个小步长。步数是(大尺寸%N 小尺寸)。
同样,如果采取了3个假设,这些步骤才适用。
答案 1 :(得分:0)
没有“无限”组合。事实上,这个数字可能很大但是有限。 此外,如果您需要严格的正方形(宽度=高度,而不仅仅是矩形),甚至更少,因为您必须将原始正方形(L面)除以两侧相同的整数,否则您将获得矩形同样。 如果你正在使用整数,我建议将L除以2,3,...... M(L / M =最小内平方长度)。
答案 2 :(得分:0)
我的数学有点模糊,但如果你有一个正方形(n ^ 2),那么你有一边(n)的长度。
从n
,您可以计算该数字的所有因子,并将它们用作较小正方形的边...
E.g。
n^2 = 44100
n = 210
Factors of n = x=2,x=3,x=5,x=7, x= ... and so on.
因此,每个因子的小方块都是
x=2 : x^2 = 4 : 44100 / 4 = 11025 small squares
x=3 : x^2 = 9 : 44100 / 9 = 4900 small squares
x=5 : x^2 = 25 : 44100 / 25 = 1764 small squares
x=7 : x^2 = 49 : 44100 / 49 = 900 small squares
等等