0

この小さなパズル (アルゴリズム) を解決しようとしています: N 個の画像アイコンがあり、それらをユーザーの画面に均等に配置したいと考えています。言って、私はそれらをテーブルに入れました。画像が 1 つの場合、テーブルには 1 つのセルが存在します。2 の場合 - 2 列の 1 行、3 の場合 - 1 行と 3 列、4 の場合 - 2 行、2 列... というように、行のスペースがなくなるまで続けます。行。

私はこれのアルゴリズムを理解しようとしていますが、おそらくこれはすでにどこかに解決策があるものですか?

私の試みはこれまでのところ次のようなものです:

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 枚の写真があり、もう 1 つの画面に 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 に答える