V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
nichan
V2EX  ›  问与答

冥思苦想了一天也没想出来,求诸位大神给个代码思路!

  •  
  •   nichan · 2013-01-17 01:05:04 +08:00 · 3452 次点击
    这是一个创建于 4364 天前的主题,其中的信息可能已经有所发展或是发生改变。
    假设,现在有7颗种子,依次编号为1到7。

    将它们全部种下去后,3号种子结了5颗新种子,7号种子结了2颗新种子,其他种子均未结种。

    分别将3号种子结出的5颗新种子命名为31,32,33,34,35。7号种子结出的2颗新种子命名为71,72(即先代的种子id加上本代的种子id)。

    又分别将31,32,33,34,35和71,72种下去,其中31结出了3颗新种子,分别命名为311,312,313。

    最后将统计到这样一个数组
    {1,2,3,31,311,312,313,32,33,34,35,4,5,6,7,71,72}

    其中,每一代的哪一颗种子是否结种,结多少种与概率无关,均为事先指定好,也就是说在我种下第一批种子之前,改批种子一共能够产生多少后代,哪颗种子能够产生后代已经被提前确定了(只是我还需要“种”这个“函数”才能得知结果)

    现已知有N颗种子,如何写循环才能够得到上述形式的数组?(假设“种”函数会返回一个包含子代id的数组)

    万分感谢!!!
    13 条回复    1970-01-01 08:00:00 +08:00
    CoX
        1
    CoX  
       2013-01-17 01:10:56 +08:00   ❤️ 1
    嵌套调用呗,跟遍历文件夹下的文件一个思路吧
    alexrezit
        2
    alexrezit  
       2013-01-17 01:16:47 +08:00   ❤️ 1
    Recursion...
    alexrezit
        3
    alexrezit  
       2013-01-17 01:24:02 +08:00
    @alexrezit
    如果你不在意性能的话...
    txx
        4
    txx  
       2013-01-17 02:07:24 +08:00 via iPhone   ❤️ 1
    dfs bfs 都可以

    我更喜欢bfs一些
    endyul
        5
    endyul  
       2013-01-17 12:27:37 +08:00   ❤️ 1
    用“种”函数构造个树再先根遍历一下
    Hua
        6
    Hua  
       2013-01-17 14:07:51 +08:00 via iPhone   ❤️ 1
    @txx +1
    013231
        7
    013231  
       2013-01-17 14:13:09 +08:00   ❤️ 1
    @txx 如果是形成樓主給出的那種數組應該用DFS啦.
    txx
        8
    txx  
       2013-01-17 16:32:54 +08:00
    @013231 bfs 加一个 字符串的sort 也可以嘛。。。 虽说dfs更短小简洁一些...
    Sunyanzi
        9
    Sunyanzi  
       2013-01-17 17:02:55 +08:00   ❤️ 1
    <?php
    // Sunyanzi @V2EX

    /* make a flowerpot ... */
    $flowerpot = [];

    /* we have 7 seeds at first ... */
    seeding_time( $flowerpot, 0, 7 );

    /* simple output ... */
    echo( implode( ' ', $flowerpot ) );

    /* main function ... using Recursion which is @alexrezit's favourite ... */
    function seeding_time( &$ret, $prefix, $number ) {

    /* the seeds we planted can sprouted ... */
    static $seeds = [
    3 => 5,
    7 => 2,
    31 => 3
    ];

    /* seeding in progress ... */
    for ( $i = 1; $i <= $number; ++ $i ) {

    /* most easy way to get seed number ... */
    $s = intval( $prefix . $i );

    /* push into result ... */
    $ret[] = $s;

    /* we have magic on this seed ..? */
    if ( isset( $seeds[$s] ) )
    seeding_time( $ret, $s, $seeds[$s] );

    }

    /* we have done ... */
    return;

    }


    // --------------------------------------------------
    // DEMO OUTPUT
    // --------------------------------------------------
    // 1 2 3 31 311 312 313 32 33 34 35 4 5 6 7 71 72
    // --------------------------------------------------
    Sunyanzi
        10
    Sunyanzi  
       2013-01-17 17:06:04 +08:00
    花了大概五分钟顺手一写效率没优化 ...

    说来 ... 看到自己的代码变成这样黑乎乎的一陀还真不是个好受的事情啊 ...
    leohxj
        11
    leohxj  
       2013-01-17 22:29:00 +08:00   ❤️ 1
    @Sunyanzi 用Gist
    Sunyanzi
        12
    Sunyanzi  
       2013-01-18 10:27:35 +08:00
    @leohxj 用 Gist 的话这个帖子加载的时候会卡住卡半天 ...

    体验不好的说 ...
    nichan
        13
    nichan  
    OP
       2013-01-20 23:05:54 +08:00
    非常感谢各位。。。最后还是用了递归解决问题。。。
    果然之前学到的还是都还给老师了吧。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1031 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 19:30 · PVG 03:30 · LAX 11:30 · JFK 14:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.