我想制作一个箭头,其基本宽度是输入大小的一半
I want to make an arrow that the base width is half of the size of the input
我有这个有效的代码,但缺少一些细节
$input=7;
$k=($input+1)/2;
for($i=1;$i<=$input;$i++){
for($j=1;$j<=$input;$j++){
if($j==($input+1)/2 || $j==$k || $j==$input-$k+1){
echo "*";
}
else{
echo "-";
}
}
echo "<br>";
$k++;
}
输出如下所示
---*---
--***--
-*-*-*-
*--*--*
---*---
---*---
---*---
但它应该是这样的
___*___
__***__
_*****_
*******
__***__
__***__
__***__
请发送一些帮助
在你的 if 语句中你有三个条件。所以只能连续三颗星。
我认为你的结构应该更复杂。您可以改用 str_repeat
。像这样:
$input=7;
for($i=1;$i<=$input;$i+=2) {
echo str_repeat('-', ($input - $i) / 2 ) .
str_repeat('*', $i) .
str_repeat('-', ($input - $i) / 2 ) .
'<br>';
}
$shaft = floor($input / 2);
for($i=1;$i<$input/2;$i++) {
echo str_repeat('-', ($input - $shaft) / 2 ) .
str_repeat('*', $shaft) .
str_repeat('-', ($input - $shaft) / 2 ) .
'<br>';
}
第一个循环绘制每行增长 2 的三角形。
第二个循环绘制轴。
因此,如果您只需要使用循环和 if else 来执行此操作,则必须详细说明您的 if 语句。这是我的解决方案:
$input = 7;
for($i=1;$i<=2*$input;$i+=2) {
for($k=1;$k<=$input;$k++) {
if(($i <= $input && $k > floor(($input - $i)/2) && $k <= ceil(($input + $i)/2)) ||
($i > $input && $k > ceil($input/4) && $k <= floor(3/4*$input))) {
echo "*";
} else {
echo "-";
}
}
echo "<br>";
}
注意:在第一个循环中我使用 $i+=2
,因此每次迭代 $i
都会增加 2。为了获得正确的行数,循环会一直持续到 2*$input
.
if
语句有两部分。在第一部分绘制三角形(每行添加两颗星,因为 $i
增加 2)。第二部分,当$i
变得大于$input
时,画轴,每边宽度的一半,宽度的1/4。
我得到答案了,谢谢大家。
$x=($input/2); $y=$x+1; $w=($input/2);
if($w%2==0) {
$w++;
}
for($i=1; $i<=$input; $i++) {
for($j=1; $j<=$input; $j++) {
if($j>=$x && $j<=$y) {
echo "*";
}
else {
echo "_";
}
}
if($i>(($input-1)/2)) {
$x=(($input-$w)/2)+1;
$y=($x+$w)-1;
}
else {
$x--;
$y++;
}
echo "<br>";
}
我有这个有效的代码,但缺少一些细节
$input=7;
$k=($input+1)/2;
for($i=1;$i<=$input;$i++){
for($j=1;$j<=$input;$j++){
if($j==($input+1)/2 || $j==$k || $j==$input-$k+1){
echo "*";
}
else{
echo "-";
}
}
echo "<br>";
$k++;
}
输出如下所示
---*---
--***--
-*-*-*-
*--*--*
---*---
---*---
---*---
但它应该是这样的
___*___
__***__
_*****_
*******
__***__
__***__
__***__
请发送一些帮助
在你的 if 语句中你有三个条件。所以只能连续三颗星。
我认为你的结构应该更复杂。您可以改用 str_repeat
。像这样:
$input=7;
for($i=1;$i<=$input;$i+=2) {
echo str_repeat('-', ($input - $i) / 2 ) .
str_repeat('*', $i) .
str_repeat('-', ($input - $i) / 2 ) .
'<br>';
}
$shaft = floor($input / 2);
for($i=1;$i<$input/2;$i++) {
echo str_repeat('-', ($input - $shaft) / 2 ) .
str_repeat('*', $shaft) .
str_repeat('-', ($input - $shaft) / 2 ) .
'<br>';
}
第一个循环绘制每行增长 2 的三角形。
第二个循环绘制轴。
因此,如果您只需要使用循环和 if else 来执行此操作,则必须详细说明您的 if 语句。这是我的解决方案:
$input = 7;
for($i=1;$i<=2*$input;$i+=2) {
for($k=1;$k<=$input;$k++) {
if(($i <= $input && $k > floor(($input - $i)/2) && $k <= ceil(($input + $i)/2)) ||
($i > $input && $k > ceil($input/4) && $k <= floor(3/4*$input))) {
echo "*";
} else {
echo "-";
}
}
echo "<br>";
}
注意:在第一个循环中我使用 $i+=2
,因此每次迭代 $i
都会增加 2。为了获得正确的行数,循环会一直持续到 2*$input
.
if
语句有两部分。在第一部分绘制三角形(每行添加两颗星,因为 $i
增加 2)。第二部分,当$i
变得大于$input
时,画轴,每边宽度的一半,宽度的1/4。
我得到答案了,谢谢大家。
$x=($input/2); $y=$x+1; $w=($input/2);
if($w%2==0) {
$w++;
}
for($i=1; $i<=$input; $i++) {
for($j=1; $j<=$input; $j++) {
if($j>=$x && $j<=$y) {
echo "*";
}
else {
echo "_";
}
}
if($i>(($input-1)/2)) {
$x=(($input-$w)/2)+1;
$y=($x+$w)-1;
}
else {
$x--;
$y++;
}
echo "<br>";
}