php打印一个边长为N的实心和空心菱型的方法

 这篇文章主要介绍了php打印一个边长为N的实心和空心菱型的方法,实例分析了php循环语句绘制图形的技巧,需要的朋友可以参考下

 
 

本文实例讲述了php打印一个边长为N的实心和空心菱型的方法。分享给大家供大家参考。具体分析如下:

实心菱型计算方法:
$n:边长
$i:当前行,0开始
$rows:总行数

上部
前面空格数=$n-$i-1
字符数=$i*2+1

下部
前面空格数=$i-$n+1
字符数=($rows-$i)*2-1

使用 str_pad 可以减少for/while等循环

 

代码如下:
/**
* 打印实心菱型
* @param int $n 边长,默认5
* @param String $s 显示的字符, 默认*
* @return String
*/
function solidDiamond($n=5, $s='*'){
$str = '';
// 计算总行数
$rows = $n*2-1;
// 循环计算每行的*
for($i=0; $i<$rows; $i++){
if($i<$n){ // 上部
$str .= str_pad('', ($n-$i-1), ' '). str_pad('', $i*2+1, $s)."rn";
}else{ // 下部
$str .= str_pad('', ($i-$n+1), ' '). str_pad('', ($rows-$i)*2-1, $s). "rn";
}
}
return $str;
}
echo '<xmp>';
echo solidDiamond(5);
echo '</xmp>';

 

 

代码如下:
*
***
*****
*******
*********
*******
*****
***
*

 

空心菱型计算方法:
$n:边长
$i:当前行,0开始
$rows:总行数

上部
前面空格数=$n-$i-1
空心的空格数=$i*2+1-2
字符数=$i*2+1 - 空心的空格数

下部
前面空格数=$i-$n+1
空心的空格数=($rows-$i)*2-1-2
字符数=($rows-$i)*2-1 - 空心的空格数

代码如下:
/**
* 打印空心菱型
* @param int $n 边长,默认5
* @param String $s 显示的字符, 默认*
* @return String
*/
function hollowDiamond($n=5, $s='*'){
$str = '';
// 计算总行数
$rows = $n*2-1;
// 循环计算每行的*
for($i=0; $i<$rows; $i++){
if($i<$n){ // 上部
$tmp = $i*2+1;
$str .= str_pad('', ($n-$i-1), ' '). str_pad(str_pad('', $tmp-2, ' ', STR_PAD_BOTH), $tmp, $s, STR_PAD_BOTH)."rn";
}else{ // 下部
$tmp = ($rows-$i)*2-1;
$str .= str_pad('', ($i-$n+1), ' '). str_pad(str_pad('', $tmp-2, ' ', STR_PAD_BOTH), $tmp, $s, STR_PAD_BOTH). "rn";
}
}
return $str;
}
echo '<xmp>';
echo hollowDiamond(5);
echo '</xmp>';

 

 

代码如下:
*
* *
* *
* *
* *
* *
* *
* *
*

 

希望本文所述对大家的php程序设计有所帮助。

时间: 2024-10-28 16:53:56

php打印一个边长为N的实心和空心菱型的方法的相关文章

Java小例子:打印一个金字塔

这是最基础的例子了,每个初学者都会要做这个题目.这个题目的目的是熟悉循环特 别是嵌套循环的使用.但是如果对 Java 足够熟悉,回头来再写这个程序,就完全不是这 么写的了. 嵌套循环是非常复杂的逻辑.特别是写得很长的嵌套循环,一个不小心把 j 写成 i, 就够你调试半天的.所以嵌套循环应该尽量避免.怎么避免?将内部循环提取成一个方法 .这样每个方法里都只有一层循环,容易看,容易改,而且不容易出错. import java.util.Arrays; /** * 打印一个字符组成的金字塔 */ pu

java 打印-java如何打印一个URL中的内容

问题描述 java如何打印一个URL中的内容 求教如何用java的api,打印一个动态网页,比如报表? 注意是非客户端打印,不用js 解决方案 内嵌一个浏览器引擎. 解决方案二: HttpURLConnection.getResponseMessage拿到string再用htmlparser解析http://htmlparser.sourceforge.net

超过范围-C如何打印一个超过int范围值的数?

问题描述 C如何打印一个超过int范围值的数? 就比如int i = 100000000000000000: 如何打印出来? 解决方案 超出了范围,你都不能赋值了,还考虑打印. C,只是语言,int 能存多大的数值要看使用它的平台.例如:Dos 时 int 是两个字节,但 Windows 平台下就是 4 个字节的.明显可存贮的数值大了很多. 在 Windows 平台下还有很多更大的数值类型,如:LONGLONG,64位整数分别叫做__int64与unsigned __int64,范围为 -2^6

vb6.0-VB6.0系统中打印一个平行四边形,用button1_click两个循环实现,请问怎么做?

问题描述 VB6.0系统中打印一个平行四边形,用button1_click两个循环实现,请问怎么做? VB6.0系统中打印一个平行四边形,用button1_click两个循环实现,请问怎么做? 解决方案 for i = 1 to 5 print tab(i); for j = 1 to 5 pirnt "*"; next print "" next

c语言-C语言打印一个由星号组成的等腰三角形怎么做?我只会打印直角三角形。

问题描述 C语言打印一个由星号组成的等腰三角形怎么做?我只会打印直角三角形. C语言打印一个由星号组成的等腰三角形怎么做?我只会打印直角三角形. 解决方案 http://jingyan.baidu.com/article/d169e186446a46436611d881.html

java-Java 打印一个空心加号,要用parameter还有布尔来判断

问题描述 Java 打印一个空心加号,要用parameter还有布尔来判断 This method is used to print items to the screen. It should take in two parameters: a. Number of items (int) b. Item to print (String) Notice that the top arm and the bottom arm of your plus sign are almost ident

打印一个镂空的矩形

问题描述 有个题让打印一个镂空的矩形我打算输出一个有4行,第一行跟第4行有5个*号,中间两行为前后各一个*组成一个镂空的矩形,但是结果却有偏差,大家可以复制下面我写的代码帮我看下,中间的两行有问题.因为本人才初学,写的代码可能很硬编,希望高手帮我改下,或者有更好的方法教我一下.不要用太难的方法,我只会FOR循环.谢谢了啊.inti=1,j,k;for(;i<=4;i++){if(i==1||i==4){for(j=1;j<=5;j++)System.out.print("*"

SAP WM LI04 试图去打印一个已经完成盘点流程(清账)的盘点单, 系统会报错!

SAP WM LI04 Print Physical Inventory Document - Inventory record 30 already cleared – LI04 试图去打印一个已经完成盘点流程(清账)的盘点单, 系统会报错:          

打印一个框,可以在平面内任意移动,并且要控制框中的一个坐标点,让它不能移动到框的外面

开发环境:ubuntu 12.04开发工具:gcc编译器   ,vim编辑器 功能: 打印一个框,可以在平面内任意移动,并且要控制框中的一个坐标点,让它不能移动到框的外面 作用: 可以用作技术培训哈   #include  #include  #include  #include    typedef struct object OBJ;   struct object { int px; int py; char c; }; int Y,X,Origin_X,Origin_Y;     //X