php通过hash区分数组,php 基础算法(用*表示金字塔)通过hash 比较两个数组相同的数...

当作为一名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 "
";

}

二.用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

如上图 :

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

}

简单思路:

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 循环就搞定了。

由因为向数组,把它存在数组里,在显示出来,就可以了。

/**

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

/**

*通过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;

}

}

/**

* 合并多个数组,不用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、付费专栏及课程。

余额充值