入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

算法游戏

创建时间:2015-11-07 投稿人: 浏览次数:824

排序算法:随机法  分治法  贪心法

http://www.cnblogs.com/kkun/archive/2011/11/23/2260312.html

插入排序(根据元素找位置) 冒泡排序(两两比较) 快速排序 (中位数) 选择排序(根据位置找元素)
堆排序(左平衡二叉树) 桶排序(key是值 value是个数,循环获取)
归并算法排序(两两分成单个元素拼合成有序集) 基数排序(按位比较) 计数排序(统计元素个数,次第相加,由索引排位) 希尔排序(按照固定间隔取数,分成多个小组,然后合并,最后间隔必须是1)  ------------------------------------------------------------------------------------------- 查找算法:二分查找、顺序查找|循序搜寻法、插捕搜寻法(分布平均的数组高效) 其它算法:牛年求牛 分苹果 猴子代王 | 菱形 杨辉三角 | 斐波那契数列、线性表删除、汉诺塔算法 哈希算法:简单哈希 一致性哈希 拉链法哈希
字符处理:数据切分,出现次数,排列组合,数据组合 破解密码 字符相似 +数字转成汉字
内置函数:合并数组 字符查找 字符长度 字符翻转 字符删除/插入/截取 字符比较 字符复制 字符连接 字符编码解码/加密解密 字符替换 截取 

 */


一.使用:牛年求牛 分苹果 猴子代王 |  菱形 杨辉三角 | 斐波那契 线性表删除

//2.牛年求牛:有一母牛,到4岁可生育,每年一头,所生均是一样的母牛,到15岁绝育,不再能生,20岁死亡,问n年后有多少头牛


[php] view plaincopy

//静态变量,循环中数值不变 | 递归是在判断内实现的 |区分年份和数目

function niunum($n) {  

static $num = 1;  

for ($i = 1; $i <= $n; $i++) {  

   if ($i >= 4 && $i < 15) {  //生育期才计算

    $num++;  

    niunum($n - $i);            //抛去计算了生育期的牛

   }  

   if ($i == 20) $num--;  

}  

return $num;  

}  

echo niunum(10);  


2. 有5个人偷了一堆苹果,准备在第二天分赃。晚上,有一人遛出来,把所有菜果分成5份,但是多了一个,顺手把这个扔给树上的猴了,自己先拿1/5藏了。

   没想到其他四人也都是这么想的,都如第一个人一样分成5份把多的那一个扔给了猴,偷走了1/5。

   第二天,大家分赃,也是分成5份多一个扔给猴了。最后一人分了一份。问:共有多少苹果?

for($i=0;;$i++){

if($i%5 == 1){

$t = $i- round($i/5) -1;

if($t%5 ==1){

$s = $t - round($t/5) -1;


if($s%5 == 1){

$x = $s-round($s/5) -1;


if($x % 5 ==1){

$o = $x - round($x/5) -1;


if($o % 5 ==1){

$la = $o - round($o/5) -1;


if($la % 5 ==1){

echo $i;

break;

}

}


}

}

}

}

}


3.一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,

如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。


function king($n,$m) {


$monkeys = range(1,$n);


$i = 0;


while(count($monkeys) > 1) {        //每个循环要算一回


if(($i+1)%$m == 0) {    //与monkey共用的$i,所以要加1,保持monkey的索引i是从1开始的

unset($monkeys[$i]);


} else {

//不是,放尾部,从下一个开始循环,被踢的猴子会消失,等于位子没有变化,就是排序了

array_push($monkeys,$monkeys[$i]);


unset($monkeys[$i]);


}


$i++;


}

//获取当前猴子的位子

return current($monkeys);


}


$king = king(100,7);


print_r($king);


4. 用符号*画一个菱形图案.


for($i=0;$i<4;$i++){                    //行数


for($j=0;$j<3-$i;$j++){         //空格数


echo "&nbsp;";


}


for($k=0;$k<$i+1;$k++){         //星星数


echo "* ";


}


echo "<br/>";


}


for($i=0;$i<3;$i++){

for($j=0;$j<$i+1;$j++){

echo "&nbsp;";

}


for($k=0;$k<3-$i;$k++){

echo "* ";

}

echo "<br/>";

}


//6.杨辉三角


[php] view plaincopy


$n=10;

for($i=0;$i<$n;$i++){               //行

for($k=$n;$k>$i;$k--){                     //由多到少,递减,--

   echo "&nbsp;";

}


for($j=0;$j<=$i;$j++){//列

   

  

   if($j==0||$i==$j){   //两边都是 1


$arr[$i][$j]=1;


   }else {


$arr[$i][$j]=$arr[$i-1][$j]+$arr[$i-1][$j-1];//上一行的两个相邻数据相加算数


   }

   

echo $arr[$i][$j]." ";

}


echo "<br>";


//6.实现斐波那契数列,格式为:1,1,2,3,5,8…即当前数字为前两个数字之和.

function feibolaqi($num) {

$arr = array();

for($i=0;$i<=$num;$i++) {

if($i == 1 || $i == 2) {

$arr[$i-1] = 1;

} else {

$arr[$i-1] = $arr[$i-2] + $arr[$i-3];

}

}

return $arr;

}

var_dump(feibolaqi(10));


//线性表的删除(数组中实现)  

function delete_array_element($array, $i) {  

$len = count($array);  

    for ($j=$i; $j<$len; $j++){  //直接从要找的点开始了

   @$array[$j] = $array[$j+1];  

}  

    array_pop($array); //删除最后空元素  

    return $array;  

}  

print_r(delete_array_element(array(1,2,3,4,5), 2));    


*

 * 

 */


/*

三.数组转化:数据切分,出现次数,排列组合,数据组合  +字符相似 用户密码  数字转成汉字


//8.把数组array(12,34,56,32) 转化为 array(1,2,3,4,5,6,3,2)


function changeArr($arr) {  

return str_split(implode("", $arr),1);  //str_split(str,num);

}  

print_r(changeArr(array(12,34,56,32)));  


//已知字符串 $string = "2dsjfh87HHfytasjdfldiuuidhfcjh";找出 $string 中出现次数最多的所有字符。


//1  

$string = "2dsjfh87HHfytasjdfldiuuidhfcjh";

$b = array_count_values(str_split($string));  //array_count_values

print_r(array_keys($b, max($b)));  

//2  暂时忽略

$re = count_chars($string, 1);  

print_r(array_map("chr", array_keys($re, max($re))));  

echo "<br />";  


1. 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?


<?php

$num = 0;


for($i=1;$i<=4;$i++){

for($j=1;$j<=4;$j++){

for($k=1;$k<=4;$k++){

if($i!=$j && $i!=$k && $k!=$j)  //!=

$num++;

echo $i.$j.$k."<br>";

}

}

}

声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
  • 上一篇:没有了
  • 下一篇:没有了
未上传头像