PHPで対称菱形を出力する簡単な方法
2292 ワード
例えば単純な菱形や星塔と呼ばれるものを出力し、まず最外層制御行番号、それから内層の循環であり、内層の循環には2つの第1の循環制御があり、それから第2の循環によって星の数を制御します.スペースを制御するのは、現在の行数for($space=1;$space<=$lines-$line;+$space)を差し引いた合計行数です.次に、星のループがfor($star=1;$star<=2*$line-1;+$star)です.
次のコードは最も簡単な出力菱形の一部です.
対称にかかわる図形の多くは、入読で示す零細+をスペースで置き換えるなど、数軸にかかわる.
まず一般的な方法は、まず++のループ出力を上半層にし、次に--のループ出力下半層にすることです.
例えば
//12 3 4 54 3 2 1/-4-3-2-01 2 3 4(数軸)/4 3 21 0 1 2 34(絶対値)
1 2 3 4 5 4 3 2 1の効果を達成することを思い付きます
まず-4-3-2-1 01 2 3 4を絶対値関数で変換します
そして4 3 2 1 01 2 3 4
対応する最初の加算はすべて同じ本に等しい例えばこれはすべて5に等しい
対応する擬似コード
この考え方によれば、まず最外層のサイクル制御は数軸、すなわち負数から正数までの歩き方for($i=-($lines-1);i<=$lines-1;++$i)
そして、中の合計行数から上の数軸の絶対値$line=$lines-abs($i)を減算します.
そして次の額コードは変わらなければいいのです
次のコードは最も簡単な出力菱形の一部です.
//$line
//$space = $lines-$line;//
//$star = 2*$line - 1;//m
//
for($line=1; $line<=$lines; ++$line) {
// ,
for($space=1; $space<=$lines-$line; ++$space) {
echo '+';
}
// ,
for($star=1; $star<=2*$line-1; ++$star) {
echo '*';
}
//
echo "
";
}
対称にかかわる図形の多くは、入読で示す零細+をスペースで置き換えるなど、数軸にかかわる.
まず一般的な方法は、まず++のループ出力を上半層にし、次に--のループ出力下半層にすることです.
例えば
$lines=12;
for ($line=1; $line <=$lines ; $line++) {
for ($j=1; $j <= $lines - $line ; $j++) {
echo "+";
}
for ($i=0; $i < 2*$line-1; $i++) {
if ($i == 0 || $i == 2*$line-2) {
echo "*";
}else{
echo "+";
};
}
echo "";
}
$lines=12;
for ($line=$lines-1; $line >=1 ; $line--) {
for ($j=1; $j <= $lines - $line ; $j++) {
echo "+";
}
for ($i=0; $i < 2*$line-1; $i++) {
if ($i == 0 || $i == 2*$line-2 || $line == $lines) {
echo "*";
}else{
echo "+";
};
}
echo "";
}
そして数軸を巧みに利用する方法もあります//12 3 4 54 3 2 1/-4-3-2-01 2 3 4(数軸)/4 3 21 0 1 2 34(絶対値)
1 2 3 4 5 4 3 2 1の効果を達成することを思い付きます
まず-4-3-2-1 01 2 3 4を絶対値関数で変換します
そして4 3 2 1 01 2 3 4
対応する最初の加算はすべて同じ本に等しい例えばこれはすべて5に等しい
対応する擬似コード
for($i=-4; $i<=4; ++$i) {
echo $i, '+';
echo abs($i), '+';
echo 5-abs($i);
echo '
';
}
この考え方によれば、まず最外層のサイクル制御は数軸、すなわち負数から正数までの歩き方for($i=-($lines-1);i<=$lines-1;++$i)
そして、中の合計行数から上の数軸の絶対値$line=$lines-abs($i)を減算します.
そして次の額コードは変わらなければいいのです
for($i=-($lines-1); $i<=$lines-1; ++$i) {
// $line
$line = $lines - abs($i);
// ,
for($space=1; $space<=$lines-$line; ++$space) {
echo '+';
}
// ,
for($star=1; $star<=2*$line-1; ++$star) {
//
if($star==1 || $star==2*$line-1) {
echo '*';
} else {
echo '+';
}
}
//
echo "
";
}