您的位置:首页 > 编程语言 > PHP开发

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

2014-07-16 00:47 671 查看
当作为一名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 ) );
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐