0

我有 5 个带孩子的菜单。在第一个菜单中,我有 16 个孩子,第二个有 22 个孩子,第三个有 10 个孩子,堡垒和第五个有 19 个孩子。

每个子菜单有 5 行,这个孩子必须在这一行中排列得很漂亮。如果可能,每行中的数字相同或更多。

例如有 16 个和 22 个孩子的第一个和第二个菜单:

  • MENU1 第一排4个孩子,第二排3个,第三排3个,第四排3个,第五排3个

  • MENU2 第一排5个孩子,第二排5个,第三排4个,第四排4个,第五排4个

我的问题是如何创建将在子菜单中添加子菜单的算法。孩子们一定要布置得很漂亮。如果可能,每行中的数字相同或更多。

4

1 回答 1

1

因为我不是 100% 清楚你的问题中的“美丽”是什么意思,所以我对什么是可以接受的做了一些假设。

以下代码最多可用于 100 个菜单配置。

  • 它首先尝试将项目分配到 3、4、5 或 6 行(60% 的案例)
  • 然后它试图在最后一行只留下 1 个(30% 的案例)
  • 然后它试图在最后一行只留下 2 个(10% 的案例)

编码:

<?php

$column_range = range(3,6);

#$menu = array(16,22,10,19);
$menu = range(1,100); # showing a range of menu configurations

print_r($menu); print '<hr />';

foreach ($menu as $item){

    $beautiful = False;

    foreach($column_range as $column_width){
        if($item%$column_width==0 && $beautiful==False){
            print "$item will be beautiful if you use $column_width per row";
            print '<br />';
            $beautiful = True;
        }
    }

    if($beautiful==False){

        foreach($column_range as $column_width){
            if($item%$column_width==1 && $beautiful==False){
                print "$item is hard to make beautiful, most rows will have $column_width, however the last row will have 1 one it";
                print '<br />';
                $beautiful = True;
            }
        }
    }

    if($beautiful==False){

        foreach($column_range as $column_width){
            if($item%$column_width==2 && $beautiful==False){
                print "$item is hard to make beautiful, most rows will have $column_width, however the last row will have 2 one it";
                print '<br />';
                $beautiful = True;
            }
        }
    }

    if($beautiful==False){
        print "$item what shall i do with you";
        print '<br />';
    }

}

?>
于 2013-08-09T07:03:50.677 回答