0

我正在尝试解决这个小难题(算法):我有 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 或类似的情况。

4

1 回答 1

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 作为参数对此进行了测试,它似乎给出了正确的输出。

如果您有任何问题,请给我留言。

于 2012-06-03T02:43:50.900 回答