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

本文实例讲述了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)."\r\n"; 
        }else{     // 下部 
            $str .= str_pad('', ($i-$n+1), ' '). str_pad('', ($rows-$i)*2-1, $s). "\r\n"; 
        } 
    } 
    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)."\r\n"; 
        }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). "\r\n";
        } 
    } 
    return $str; 

echo '<xmp>'; 
echo hollowDiamond(5); 
echo '</xmp>';

代码如下:


   * * 
  *   * 
 *     * 
*       * 
 *     * 
  *   * 
   * * 
    *

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

(0)

相关推荐

  • PHP生成便于打印的网页

    很多新闻和信息站点都提供了一种生成便于打印的网页的方法,所产生的页面的排版布局更有利于打印机的打印输出,这种方法方便了我们从网页上直接打印我们所需的内容,而不必为格式不规整伤脑筋,或者粘贴到文本编辑器中重新排版.然而,我却没看到有多少网站详细解释这些是如何实现的,在这里我提供一小段代码--用PHP来实现生成便于打印的网页并不是像想象的那么难,希望对大家有帮助. 要生成便于打印的网页,需要我们做哪些工作呢?这主要取决于你的网站特点,和你想要生成的版式特征,不过有一些基本处理需要完成: 1.    

  • cakephp打印sql语句的方法

    本文实例讲述了cakephp打印sql语句的方法.分享给大家供大家参考.具体实现方法如下: 将以下语句复制到你的代码中,可以打印出在这之前所有的sql语句: $sources = ConnectionManager::sourceList(); if (!isset($logs)): $logs = array(); foreach ($sources as $source): $db =& ConnectionManager::getDataSource($source); if (!$db-

  • PHP打印输出函数汇总

    本篇文章一直来学习PHP中所有用于输出信息的函数,分类比较来学习其相同点与不同点,掌握日常开发中必备的技巧. 开发就一定需要调试代码,而PHP调试代码不能像iOS那种编译器语言可以通过Xcode这样的开发软件来单步调试,因此开发PHP的人员通常会通过输出函数打印相关提示信息来调试代码. PHP中常用的打印输出的函数一步步讲解 echo echo函数可以同时输出多个字符串,带多个参数,但并不要求使用圆括号,也没有返回值.但是,如果带上圆括号也没有问题的,因此函数本就需要圆括号的: echo '标哥

  • php+mysqli实现将数据库中一张表信息打印到表格里的方法

    本文实例讲述了php+mysqli实现将数据库中一张表信息(包括表头)打印到表格里的方法.分享给大家供大家参考.具体如下: 这段代码将就看吧.需要学习基础知识.代码如下: 复制代码 代码如下: <?php $mysqli = new MySQLi("localhost","root","123456","liuyan"); if(!$mysqli){  die($mysqli->error); } function

  • php打印输出棋盘的实现方法

    本文实例讲述了php打印输出棋盘的两种实现方法.分享给大家供大家参考.具体实现方法如下: 例子1,代码如下: 复制代码 代码如下: <?php /**  * 隔行隔列换色  * string fun_table(int $rows=9,int $cols=9)  * $rows 表示行数 必须为整数 并且必须在1-20之间  * $cols 表示列数 必须为整数 并且必须在1-20之间  */ function fun_table($rows=9,$cols=9){  if ($rows<1

  • 用在PHP里的JS打印函数

    auto=1立即PRINT,否则timeOut毫秒后PRINT,如printPage(0,5000): function printPage($auto=1,$timeOut=10000) { if ($auto == 1) { echo " < SCRIPT LANGUAGE="JavaScript" > < !-- Begin if (window.print) { window.print(); } else { alert('No printer d

  • PHP云打印类完整示例

    本文实例讲述了PHP云打印类.分享给大家供大家参考,具体如下: 一个项目需求要几百台电脑都有打印功能,本来是想用网络打印机的,后来发现没有网络打印机,就自己动手写一个打印类算了. 类实现想法是:先把要打印的数据都收集起来,在用js调用window打印函数.目前就使用于IE. 类提供打印排队功能.(PS,说白了就是一条一条读取数据) class Wprint{ //收集打印代码 private $data = array(); //处理打印代码 private $handle; public fu

  • PHP遍历并打印指定目录下所有文件实例

    复制代码 代码如下: <?php//功能:遍历并打印指定目录下所有文件 function scan_dir($dir_name,$dir_flag=1) { static $FILE_COUNT=1;                //记录文件数目 初值为1 目录名称不记 $FILE_COUNT--;                       //每调用一次scan_dir()函数自减1 @$dir_handle=opendir($dir_name);     //抑制错误信息显示  便于自定

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

    本文实例讲述了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 $

  • Python实现打印实心和空心菱形

    1.打印实心菱形 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页.如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识. 方法一: a = int(input("请输入菱形每条边星星的个数:")) b = a c = a for i in range(1, a + 1): # 先打印正三角,由空格和*根据规律组成 print(" " * (b - 1), "*" * (2 *

  • java高效打印一个二维数组的实例(不用递归,不用两个for循环)

    打印1个元素,不让循环变量i++,走出思维定式(执行一次循环体,就i++).public class OneForPrint2DArr { public static void main(String[] args) throws Exception { int[][] a = { { 1, 2, 3 }, { 4, 5} }; for (int i = 0, j = 0; i < a.length;) { System.out.println(a[i][j]); j++; if (j >=

  • python 使用递归实现打印一个数字的每一位示例

    我就废话不多说了,直接上代码吧! def func(n): # 从高分为开始打印 lengh = len(str(n)) # 确定数字的长度 x = 10**(lengh-1) # 确定数字的分位 if n < 10: print(n) else: print(int(n/x)) func(n % x) # 对n的x分位取余得到 def func1(n): # 从低分位开始打印 if n < 10: print(n) else: print(n % 10) func(int(n / 10))

  • golang 两个go程轮流打印一个切片的实现

    问题描述: 两个 go 程轮流打印一个切片. Golang 实现: 使用两个 channel,只用来判断 package main import ( "fmt" "sync" ) // 两个 go 程轮流打印一个切片 func main() { ch1 := make(chan bool, 1) ch2 := make(chan bool, 1) ch1 <- true nums := []int{1, 2, 3, 4, 5, 6, 7, 8, 9} var

  • spring中向一个单例bean中注入非单例bean的方法详解

    目录 前言 错误实例演示 实现ApplicationContextAware接口 lookup method lookup method签名 总结 前言 看到这个题目相信很多小伙伴都是懵懵的,平时我们的做法大都是下面的操作 @Component public class People{ @Autowired private Man man; } 这里如果Man是单例的,这种写法是没有问题的,但如果Man是原型的,这样是否会存在问题. 错误实例演示 这里有一个原型(生命周期为prototype)的

  • javascript实现点击按钮弹出一个可关闭层窗口同时网页背景变灰的方法

    本文实例讲述了javascript实现点击按钮弹出一个可关闭层窗口同时网页背景变灰的方法.分享给大家供大家参考.具体分析如下: 这里点击按钮后,弹出一个可关闭的层窗口,随之网页背景变灰,在QQ网站上经常会看到QQ登录的效果,就和这个很类似,代码段基于JavaScript,根据你的情况使用,有时候是用CSS完成的这种功能. <html> <head> <meta http-equiv="Content-Type" content="text/htm

  • linux的一个find命令配合rm删除某天前的文件方法

    语句写法:find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \; 例1: 将/usr/local/backups目录下所有10天前带"."的文件删除 find /usr/local/backups -mtime +10 -name "*.*" -exec rm -rf {} \; find:linux的查找命令,用户查找指定条件的文件 /usr/local/backups:想要进行清理的任意目录 -

  • 一个用jquery写的判断div滚动条到底部的方法【推荐】

    jQuery 里和滚动条有关的概念很多,但是有三个属性和滚动条的拖动有关,就是:scrollTop.scrollLeft.scrollHeight.其中 scrollHeight 属性,互联网上几乎搜素不到关于它的应用技巧,而我正好需要用到它. 我们现在只探讨和垂直滚动有关的 scrollTop.scrollHeight 属性. 一.滚动条有关属性的正确理解: 假设有以下Html代码: <div id="div1" style="overflow-y:auto; ove

  • php读取出一个文件夹及其子文件夹下所有文件的方法示例

    本文实例讲述了php读取出一个文件夹及其子文件夹下所有文件的方法.分享给大家供大家参考,具体如下: 今天的需求要在一个文件夹中读取出这个文件夹下所有的文件,当然也包括这个文件夹下面所有的子文件夹,当然网上有很多的教程,但为了自己理解得更加深刻,还是自己写一下吧.代码如下: $path = './use'; $result = scanFile($path); function scanFile($path) { global $result; $files = scandir($path); f

随机推荐