均匀地在屏幕上分配项目

时间:2012-06-02 22:35:45

标签: algorithm layout

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

1 个答案:

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

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