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 ) );


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值