<?php
//打印空心菱形
$n=8;
for($i=1;$i<=2*$n-1;$i++){//外层for控制金字塔的层数
//在打印*前先打印空格
if($i<=$n){
for($k=1;$k<=$n+1-$i;$k++){
echo " ";
}
for($j=1;$j<=2*$i-1;$j++){//能内层for控制每层*的个数
if($i==1){
echo '*';
}else{
if($j==1||$j==2*$i-1){
echo '*';
}else{
echo ' ';
}
}
}
}else{
for($k=1;$k<=$i-$n;$k++){
echo ' ';
}
for($j=1;$j<=2*(2*$n-$i)-1;$j++){
if($i=2*$n-1){
echo '*';
}else{
if($j==1||$j==2*(2*$n-$i)-1){
echo '*';
}else{
echo ' ';
}
}
}
}
echo '<br/>';
}
?>
输出结果为为什么会这样????看了半天也不明白,求大神解释!
//打印空心菱形
$n=8;
for($i=1;$i<=2*$n-1;$i++){//外层for控制金字塔的层数
//在打印*前先打印空格
if($i<=$n){
for($k=1;$k<=$n+1-$i;$k++){
echo " ";
}
for($j=1;$j<=2*$i-1;$j++){//能内层for控制每层*的个数
if($i==1){
echo '*';
}else{
if($j==1||$j==2*$i-1){
echo '*';
}else{
echo ' ';
}
}
}
}else{
for($k=1;$k<=$i-$n;$k++){
echo ' ';
}
for($j=1;$j<=2*(2*$n-$i)-1;$j++){
if($i=2*$n-1){
echo '*';
}else{
if($j==1||$j==2*(2*$n-$i)-1){
echo '*';
}else{
echo ' ';
}
}
}
}
echo '<br/>';
}
?>
输出结果为为什么会这样????看了半天也不明白,求大神解释!
$diamond = make_diamond_array($line);
$total = $line * 2 - 1;
for($i = 1; $i <= $total; $i++) {
for($j = 1; $j <= $total; $j++) {
if($diamond[$i][$j]) {
echo $flag;
}else{
echo $space;
}
}
echo $end;
}
}function make_diamond_array($line) {
$line = intval($line);
$diamond = array();
for($i = 1; $i <= $line; $i++) {
$diamond[$i] = $diamond[$line * 2 - $i] = array(($line - $i + 1) => true, ($line + $i - 1) => true);
}
return $diamond;
}print_diamond(6);
其实这个小程序也是遵循了MVC...
我把任务拆成了2步,1生成菱形数据的以坐标1,1开头的二维数组,2打印
make_diamond_array()是数据,print_diamond()是视图,最后一行运行函数...就是没什么存在感的控制器吧 - -
make_diamond_array生成的二维数组中true的位置表示要打印星星,既然菱形上下对称左右也对称,公式应该不难找
应为
for($i=1;$i<=$n;$i++){//外层for控制金字塔的层数
//打印空心菱形
$n=8;
for($i=1;$i<=2*$n-1;$i++){//外层for控制金字塔的层数
//在打印*前先打印空格
if($i<=$n){
for($k=1;$k<=$n+1-$i;$k++){
echo " ";
}
//能内层for控制每层*的个数
for($j=1;$j<=2*$i-1;$j++){
if($i==1){
echo '*';
}else{
if($j==1||$j==2*$i-1){
echo '*';
}else{
echo ' ';
}
}
}
}else{ //问题出现在这个else里
for($k=1;$k<=$i-$n+1;$k++){ //这里$k <= $i-$n 应该为$k<=$i-$n+1
echo ' ';
}
for($j=1;$j<=2*(2*$n-$i)-1;$j++){
if($i==2*$n-1){ //你的这里少了一个等于号,所以$i变成了常数 $i = 17
echo '*';
}else{
if($j==1||$j==2*(2*$n-$i)-1){
echo '*';
}else{
echo ' ';
}
}
}
}
echo '<br/>';
}
?>
*
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
*
<?php
//打印空心菱形
$n=8; // 共有 2*$n + 1 层
for($i=1;$i<=2*$n+1;$i++){ //循环所有层
for($j=1;$j<=2*$n+1;$j++){ //循环所有列,把菱形想成正方形
if($i<= 9){ //上面$n+1层
if($j == $n-$i+2 || $j == $n+$i){ //上面n+1层 前面那个*坐标为 $n-$i+2 后面那个为$n+$i
echo "*";
}else{
echo " ";
}
}else{ //下面$n层
if($j == $i-$n || $j == 3*$n-$i+2){ //下面层,前面那个*坐标为 $i-$n 后面为 3*$n-$i+2
echo "*";
}else{
echo " ";
}
}
}
echo '<br/>';
}
?>
//打印空心菱形
$n=8; // 共有 2*$n + 1 层
for($i=1;$i<=2*$n+1;$i++){ //循环所有层
for($j=1;$j<=2*$n+1;$j++){ //循环所有列,把菱形想成正方形
if($j == $n-$i+2 || $j == $n+$i || $j == $i-$n || $j == 3*$n-$i+2){
echo "*";
}else{
echo " ";
}
}
echo '<br/>';
}
如果看的懂的话,还可以直接这样写
?>
if($i<=$rows/2){
$tmp = ($i*2)+1;
echo str_pad('',($rows-$tmp)/2,' ',STR_PAD_LEFT).str_pad(str_pad('',$tmp-2,' ',STR_PAD_BOTH),$tmp,'*',STR_PAD_BOTH)."\r\n";
}else{
$tmp = ($rows/2-($i-$rows/2+1))*2+1;
echo str_pad('',((($i*2)+1)-$rows)/2,' ',STR_PAD_LEFT).str_pad(str_pad('',$tmp-2,' ',STR_PAD_BOTH),$tmp,'*',STR_PAD_BOTH)."\r\n";
}
}}echo '<xmp>';
diamond(5);
echo '</xmp>';
*
* *
* *
* *
* *
* *
* *
* *
*
$end = 50;
$middle = $end / 2;
$space = " ";
$str = '';for ($layer = $start; $layer <= $end; $layer++) {
if ($layer == $start || $layer == $end) {
$str .= str_repeat($space, $middle);
$str .= '*';
} else {
$str .= str_repeat($space, abs($middle - $layer));
$str .= '*';
$str .= str_repeat($space, $layer <= $middle ? $layer*2 - 1 : ($end - $layer) * 2 - 1) ;
$str .= '*';
}
$str .= '<br />';
}echo $str;