如何以最少的代码解决这个问题,以下是问题
*****
****x
***xx
**xxx
*****
**xxx
***xx
****x
*****
这是我想改进的代码:
<?php
for ($i=0; $i < 5 ; $i++) {
if($i >= 1 & ($i <= 3))
{
for ($t=0; $t < 5-$i ; $t++)
echo "*";
for ($t=0; $t < $i ; $t++)
echo "x";
}
else
for ($j=0; $j < 5 ; $j++)
echo "*";
echo "<br/>";
}
for ($f=1; $f < 5 ; $f++) {
for ($j=0; $j < $f+1; $j++)
echo "*";
for ($v=3; $v>= $f; $v--)
echo "x";
echo "<br/>";
}
?>
答案 0 :(得分:1)
要创建带有重复符号的字符串,您可以使用str_repeat
。使用此功能,您的代码可以简化为:
$num = 5;
for ($i = $num; $i > 1; $i--) {
echo str_repeat('*', $i) . str_repeat('x', $num - $i) . PHP_EOL;
}
echo str_repeat('*', $num) . PHP_EOL;
for ($i = 2; $i <= $num; $i++) {
echo str_repeat('*', $i) . str_repeat('x', $num - $i) . PHP_EOL;
}
即使您不能使用php核心功能,也可以编写自己的函数来创建与str_repeat
相同的结果:
function createLine($starsCount, $XCount) {
$result = '';
for ($i = 0; $i < $starsCount; $i++) {
$result .= '*';
}
for ($i = 0; $i < $XCount; $i++) {
$result .= 'x';
}
return $result;
}
并将代码重写为:
$num = 5;
for ($i = $num; $i > 1; $i--) {
echo createLine($i, $num - $i) . PHP_EOL;
}
echo createLine($num, 0) . PHP_EOL;
for ($i = 2; $i <= $num; $i++) {
echo createLine($i, $num - $i) . PHP_EOL;
}