首页 > 解决方案 > 使用php创建两个三角形

问题描述

有人请帮助我使用 PHP 创建一个两个三角形图案。我已经编写了代码,但输出与下面的预期不同。 预期产出

我的代码:

function generatePattern($num) {
      for ($id1 = 0; $id1 <= $num; $id1 = $id1 + 1) {
         for ($id2 = $num; $id2 >= $id1; $id2 = $id2 - 1) {
            print(' ');
         }
         for ($id3 = 1; $id3 <= $id1; $id3 = $id3 + 1) {
            if ($id3 % 4 == 3) {
               echo "o";
            } else if ($id3 % 2 == 1) {
               echo "x";
            } else {
               echo " ";
            }
         }
         echo "\n";
      }
for ($id1 = 0; $id1 <= $num-1; $id1 = $id1 + 1) {
         echo str_repeat(' ', $num - 1);
         for($id3 = $num-1; $id3 >= $id1; $id3 = $id3 - 1){
            if ($id3 % 4 == 3) {
               echo "o";
            } else if ($id3 % 2 == 1) {
               if ($id1 % 4 == 3) {
                  echo "o";
               } else if ($id1 % 2 == 0) {
                  echo " ";
               } else if ($id1 % 2 == 1) {
                  echo "x";
               } else {
                  echo "x";
               }
            } else if ($id3 == $id1){
               echo "x";
            } else {
               echo " ";
            }
         }
         echo "\n";
      }
   }

   generatePattern(4);

而我目前的输出是这样的(底部三角形仍然乱七八糟) 输出

标签: php

解决方案


o对和之间的空间进行必要的更改x

function generatePattern($num) {
    if($num % 2 == 0)
    {
        $num1 = $num + 1;
    }else{
        $num1 = $num;
        $num = $num - 1;
    }
    for ($id1 = 1; $id1 <= $num; $id1++) {
        
        for ($id2 = $num; $id2 >= $id1; $id2--) {
            print(' ');
        }
        for ($id3 = 1; $id3 <= $id1; $id3++) {
            if ($id3 % 4 == 3) {
                echo "o";
            } else if ($id3 % 2 == 1) {
                echo "x";
            } else {
                echo " ";
            }
        }
        echo "\n";
    }
    $str = str_repeat('x o ', ceil(($num1*2)/4));
    echo substr($str, 0, $num1*2);
    echo "\n";
    $j = $num;
    for($id1 = $num; $id1 >=1; $id1 = $id1 - 2)
    {
        for($id2 = 2; $id2 >= 1; $id2--)
        {
            if($j % 2 == 0)
            {
                $pattern = [' ', 'x', ' ', 'o',];
            }else{

                $pattern = [' ', 'o', ' ', 'x',];
            }
            echo str_repeat(' ', ($id2%2 == 0) ? $num: $num - 1);

            $design = implode('', $pattern);
            do{
                $design .= implode('', $pattern);
            }while(strlen($design) < $id1);
            echo substr($design, 0, $id1);
            echo "\n";
        }
        $j--;
    }
}

generatePattern(14);

推荐阅读