以一个数列a1,a2,a3...an 做为输入源,打印一个这样的矩阵:a2包围a1,a3包围a2,a4包围a3,依次类推,形如这样:
                                      
           a a a a a
           a b b b a
           a b c b a
           a b b b a
           a a a a a
这个用php怎么实现呢?

解决方案 »

  1.   

    就用a,b,c吧,就是上面我写的那些
      

  2.   

    可能和贪吃蛇有点类似的东西吧~反正使用的绝对的递归骂我的思路如下;我们输出的时候,应该是从外面输出。所以,我们在递归的时候,从里面往外递归。也就是说,先得到最里面的那个东西,然后再得到往外的一层。按照你给出的图像分析得出,矩阵的大小是1+2*(n-1)。嘿嘿~这个就好做的多了……
    //越小,越是在里面
    $str[]="a1";
    $str[]="a2";
    $str[]="a3";
    $str[]="a4";
    $l=count($str);
    function test($num,$num1){//参数就是数字,
     if ($num!=$num1){
     echo $str[$num〕;
     for ($i=0;$i<($num-2)*2+1;$i++){
       echo $str[$num];
      }
     }
     else{
      for ($i=0;$i<($num-1)*2+1;$i++){
       echo $str[$num];
      }
     }
     test($num-1,$num)//在这里,你就知道了为什么有两个参数了吧?
    }test($l,$;);唉~不知道对不对,反正是没有时间验证了~
      

  3.   

    有错误……错误的地方换不少……//越小,越是在里面
    $str[]="a1";
    $str[]="a2";
    $str[]="a3";
    $str[]="a4";
    $l=count($str);
    function test($num,$num1){//参数就是数字,
    if ($num!=$num1){
    echo $str[$num〕;
    for ($i=0;$i<($num-2)*2+1;$i++){
    echo $str[$num];
    }
    }
    else{
    for ($i=0;$i<($num-1)*2+1;$i++){
    echo $str[$num];
    }
    }
     if ($num-1>=0){test($num-1,$num);}//在这里,你就知道了为什么有两个参数了吧?
    }test($l,$;);
      

  4.   

    test(($num,$num1)
    两个参数是什么意思呢?
      

  5.   

    if ($num-1>=0){test($num-1,$num);}//在这里,你就知道了为什么有两个参数了吧?看到这个了吧?主要是为了能够参与比较的结果,为了这个,只能使用两个参数了,第一个是当前的数组数,第二个是前一个数组数。这个函数写的太仓促,没有自己试验,不过程序逻辑应该是没有问题的。哪里有问题,你自己查看下吧。忘记说了,这个只能输出上半部分,下半部分是这个的逆输出。函数差不多,稍微改动下就OK了~
      

  6.   


    $aa[0] = "0";
    $aa[1] = "1";
    $aa[2] = "2";
    $aa[3] = "3";$count = count($aa)*2-1;
    for($b=0;$b<count($aa);$b++)
    { for($i=$b;$i<$count-$b;$i++)
    {
    $result[$b][$i] = $aa[$b];
    } for($i=$b;$i<$count-$b;$i++)
    {
    $result[$count-$b-1][$i] = $aa[$b];
    } for($i=$b;$i<$count-$b;$i++)
    {
    $result[$i][$b] = $aa[$b];
    } for($i=$b;$i<$count-$b;$i++)
    {
    $result[$count-$i-1][$count-$b-1] = $aa[$b];
    }}
    echo "\n\n ";
    for($i=0;$i<count($result);$i++)
    { for($j=0;$j<count($result[$i]);$j++)
    {
    echo $result[$i][$j]." ";
    }
    echo "\n ";
    }
      

  7.   

    噢,不是“蛇行图”$ar = array('a', 'b', 'c', 'd');$cnt = count($ar);for($i=0; $i<$cnt; $i++) {
    for($j=0; $j<$cnt; $j++) {
    echo $ar[$j<$i ? $j : $i];
    }
    for($j=$cnt-2; $j>=0; $j--) {
    echo $ar[$j<$i ? $j : $i];
    }
    echo '<br>';
    }
    for($i=$cnt-2; $i>=0; $i--) {
    for($j=0; $j<$cnt; $j++) {
    echo $ar[$j<$i ? $j : $i];
    }
    for($j=$cnt-2; $j>=0; $j--) {
    echo $ar[$j<$i ? $j : $i];
    }
    echo '<br>';
    }
      

  8.   

    这样更简洁
    for($i=-$cnt; $i<$cnt; $i++) {
    for($j=-$cnt; $j<$cnt; $j++) {
    if(abs($j) < abs($i)) {
    echo $ar[$cnt-1-abs($i)];
    }else {
    echo $ar[$cnt-1-abs($j)];
    }
    }
    echo '<br>';
    }aaaaaaa
    abbbbba
    abcccba
    abcdcba
    abcccba
    abbbbba
    aaaaaaa去掉 $cnt-1- 即
    for($i=-$cnt; $i<$cnt; $i++) {
    for($j=-$cnt; $j<$cnt; $j++) {
    if(abs($j) < abs($i)) {
    echo $ar[abs($i)];
    }else {
    echo $ar[abs($j)];
    }
    }
    echo '<br>';
    }ddddddd
    dcccccd
    dcbbbcd
    dcbabcd
    dcbbbcd
    dcccccd
    ddddddd
      

  9.   

    呵呵,是的,省掉了我几个for语句。
      

  10.   

    xuzuning(唠叨) 老大的程序,还真的让我无法表达了……算法比我的好……而且抛弃了让人讨厌的递归……