zoukankan      html  css  js  c++  java
  • php 基础算法(用*表示金字塔)通过hash 比較两个数组同样的数

        当作为一名php 程序猿,每天总与数据库打交道,做着最底层的程序猿的工作,開始着手研究一些算法,希望自己能在计算机的道路上走的更远。事实上我更喜欢管理,希望自己能作为一个卓越的管理者,但并不影响我对技术的追求。

          *

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

    ***********

    上图php代码例如以下

    <?php
    for($i=1;$i<=6;$i++){
      for($z=5;$z>=$i;$z--){
      	echo " ";
      } 
    	for($j=1;$j<=2*$i-1;$j++){
    	    echo "*";
    	}
    	echo "<br/>";
    }


    二.用PHP 写杨辉三角。

                         1   
                      1   1   
                    1   2   1   
                  1   3   3   1   
                1   4   6   4   1   
              1   5   10   10   5   1   
            1   6   15   20   15   6   1   
          1   7   21   35   35   21   7   1   
        1   8   28   56   70   56   28   8   1   
      1   9   36   84   126   126   84   36   9   1   

      如上图 :

    <?php
    for($i = 0; $i < 10; $i ++) {
    	for($z = 9; $z >= $i; $z --) {
    		echo "  ";
    	}
    	for($j = 0; $j <= $i; $j ++) {
    	    if($j==0  ||  $j==$i){
    		     $newarray[$i][$j]=1;
    	    }else{
    			$newarray[$i][$j]=$newarray[$i-1][$j]+$newarray[$i-1][$j-1];
    	    }
    	     echo $newarray[$i][$j]."   ";
    	}
    	
    	echo "<br/>";
    }
     

    简单思路:

     1.首先杨辉三角初始模型应该例如以下图

                           1   
                       1      1   
                    1     1     1   
                  1   1   1   1   
                1   1   1   1   1   
              1  1    1    1   1   1   
            1   1  1   1   1   1   1   
          1   1   1   1   1    1  1   1   
        1   1   1   1   1   1   1   1   1   
      1   1   1   1   1   1   1   1   1   1   

    上图的形式应该非常好表示的,依据菱形的特定去考虑。两个for 循环就搞定了。

    由由于向数组,把它存在数组里,在显示出来,就能够了。


    <?php
    /**
     * @author lxy
     * 在一组数中,要求插入一个数,按其原来顺序插入,维护原来排序方式。
     * 首先须要说明的是用户给定的数组是要有一定顺序的。如升序或降序
     * 不能用排序函数如sort等
     */
    class insertvalue {
    	private function __construct() {
    	}
    	/**
    	 * 推断是升序还是降序
    	 * 由于数组是有顺序的所以能够这样处理
    	 * 可是要保证键名必须从 0 開始
    	 * 保证数组数据没有反复的值,
    	 */
    	private static function judgesort($array) {
    		$flg = '';
    		$countarray = count ( $array );
    		$newarray = array_unique ( $array );
    		$newarray = array_values ( $newarray ); // 保证键值都是从0,1,2開始的
    		$n = count ( $newarray );
    		if (count ( $newarray ) == 1) {
    			$flg = 0;
    		} else {
    			for($i = 0; $i < $n; $i ++) {
    				if ($newarray [$i] < $newarray [$i + 1]) {
    					$flg = 1;
    					break;
    				} else {
    					$flg = - 1;
    					break;
    				}
    			}
    		}
    		return $flg;
    	}
    	/**
    	 * 插入元素
    	 */
    	private static function insertvalue($val, $array) {
    		$flg = self::judgesort ( $array );
    		$n = count ( $array );
    		// 升序
    		if ($flg == 1) {
    			
    			if ($val > $array [count ( $array ) - 1]) {
    				$array [count ( $array ) + 1] = $val;
    				return $array;
    			}
    			for($i = 0; $i < $n; $i ++) {
    				if ($array [$i] >= $val) {
    					$t1 = $array [$i];
    					$array [$i] = $val;
    					for($j = $i + 1; $j <= $n; $j ++) {
    						$t2 = $array [$j];
    						$array [$j] = $t1;
    						$t1 = $t2;
    					}
    					return $array;
    				}
    			}
    		}
    		// 降序
    		if ($flg == - 1) {
    			if ($val <= $array [$n - 1]) {
    				$array [$n] = $val;
    				return $array;
    			}
    			for($i = 0; $i < $n; $i ++) {
    				if ($val >= $array [$i]) {
    					$t3 = $array [$i];
    					$array [$i] = $val;
    					for($j = $i + 1; $j <= $n; $j ++) {
    						$t4 = $array [$j];
    						$array [$j] = $t3;
    						$t3 = $t4;
    					}
    					return $array;
    				}
    			}
    		}
    		if ($flg == 0) {
    			$array [$n] = $val;
    			return $array;
    		}
    	}
    	/**
    	 * 入口文件
    	 */
    	public static function main($val, $array) {
    		$newarray = insertvalue::insertvalue ( $val, $array );
    		return $newarray;
    	}
    }
    
    $a = 6;
    $array = array (
    		1,
    		1,
    		1,
    		1,
    		1,
    		9 
    );
    $newarray = insertvalue::main ( $a, $array );
    var_dump ( $newarray );
    


    <?php
    /**
    *通过hash 比較两个数组同样的数
     */
    $arr=array(a,b,c,d,f);
    $towarr=array(a,c,d);
    $same=array();
    $newarray=array();
    foreach($arr as $val){
    	$newarray[$val]=1;
    }
    foreach ($towarr as $value){
    	if($newarray[$value]==1){
    		$same[]=$value;
    	}
    }
    

    <?php
    /**
     * 合并多个数组,不用array_merge(),题目来于论坛。
     */
    header("Content-type:text/html;charset='utf-8'");
    function conjunctionarray() {
    	$newarray = array ();
    	$num = func_num_args (); //函数參数的个数
    	$valarray = func_get_args (); //參数列表
    	for($i = 0; $i < $num; $i ++) {
    		if (is_array ( $valarray [$i] )) {
    			$newarray [] = $valarray [$i];
    		} else {
    			exit ( $valarray [$i] . '不是数组' );
    		}
    	}
    	return $newarray;
    }
    
    $a = array (
    		1,
    		2,
    		3 
    );
    $b = array(3);
    print_r ( conjunctionarray ( $a, $b ) );


  • 相关阅读:
    《计算机图形学-基于3D图形开发技术》读书笔记
    【转】OpenGL和D3D 矩阵对比
    【转】D3D中详细拾取操作
    根据点坐标改变字体显示位置
    静态常量和常量在类中的初始化
    MFC单文档中使用D3D9
    单文档切换OpenGL视图
    超大地形的处理 (Terrain Visualization)【转自知乎】
    又出现这种问题。。。
    属性
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4298211.html
Copyright © 2011-2022 走看看