我正在尝试解决这个小谜题(算法):我有N个图像图标,我想在用户屏幕上均匀分布它们。说,我把它们放在一张桌子里。如果有一个图像,表格中将有一个单元格。如果两个 - 一行有两列,如果是三行 - 一行和三列,如果是四行 - 两行,两列......依此类推,直到行空间消失,从那以后表只应在列中增长而不增加额外的行。
我正在尝试为此算一个算法,也许这已经在某个地方找到了解决方案?
到目前为止,我的尝试是这样的:
obtain_max_rows()
obtain_visible_columns()
if (number_of_pictures > max_rows*max_columns)
{
columns = roundup(number_of_pictures/max_rows)
for(max_rows){generate row;for columns{generate column}}
}
else
{
**here comes to trouble...**
}
这个逻辑虽然有点傻 - 它不知何故需要考虑第一个屏幕上有12张图片而另外2个试图平衡8/6或者某种类似的情况。
答案 0 :(得分:2)
我想我找到了答案:
typedef struct{int width, height;} rectangle;
...
rectangle findOptimalDivision(int numberOfCuts){
int x = numberOfCuts, y = (int)sqrt(numberOfCuts);
while (x%y) { // when y = 1 it will always exit out (anything can be divided by 1)
y--;
}
return (rectangle){y,numberOfCuts/y};
}
这应该根据单元格给出表格(或rectangle
)的高度和宽度。
我用1 - 100作为参数测试了它,它似乎给出了正确的输出。
如果您有任何问题,请给我留言。