php算法题

1 2 3 5 8 根据规律写出函数,当输入n时的值

public function index($n)
	{
		if($n==1){
			return 1;
		}elseif ($n==2) {
			return 2;
		}else{
			return self::index($n-1)+self::index($n-2);
		}
 }

输入一个字符串,统计其中的数字,字母,空格和其他字符

public function index($str)
{
	$length=strlen($str);
	$num=0;
	$letter=0;
	$space=0;
	$other=0;
	for($i=0;$i<$length;$i++)
	{	
		$x=substr($str, $i, 1);
		if($x>='0'&&$x<='9'){
			$num++;
		}elseif(($x>='a'&&$x<='z')||($x>='A'&&$x<='Z')){
			$letter++;
		}elseif ($x==" ") {
			$space++;
		}else{
			$other++;
		}
	}
	echo "letter:"."$letter"."\n";
	echo "num:"."$num"."\n";
	echo "space:"."$space"."\n";
	echo "other:"."$other"."\n";
}

一个数,他加上100是个完全平方数,再加上一个168又是一个完全平方数,求这个数

public function index()
{
	for($i=0;;$i++)
	{
		if(sqrt($i+100)==intval((sqrt($i+100))))
			if(sqrt($i+100+168)==intval(sqrt($i+100+168))){
				echo $i;
				break;
			}
	}
}

输入一段英文,去掉空格后输出

public function index($str)
{
	$str = trim($str);
	$return_msg='';
	for($i=0;$i<strlen($str);$i++)
	{
		$x = substr($str, $i , 1);
		if($x!=" "){
			$return_msg.=$x;
		}
	}
	echo $return_msg;
}

判断一个数是不是素数

public function check($n)
{	
	if($n<=2){
		return "yes";
	}
	if($n%2==0){
		return "no";
	}
	for($i=3;$i<$n/2;$i++)
	{
		if($n%$i==0){
			return "no";
		}
	}
	return "yes";
}

找出小于n的所有素数(调用了上一题的函数)

public function index($n)
{
	for($i=1;$i<$n;$i++)
	{
		if(self::check($i)=="yes"){
			echo $i.'<br />';
		}
	}
}

一个猴子第一天摘了若干个桃子,第一天吃一半加一个,第二到九天也是,到第十天时,刚好只剩下一个,问第一天摘了几个

public function index()
{	
	$x = 1;
	for($i=10;$i>0;$i--)
	{
		if($i!=1){
			$x=$x*2+1;
		}else{
			echo "$x";
		}
	}
}

一共有五只猴子他们一起摘了一堆桃子,第一个人过来把桃子分为5分,丢掉了多的一个,拿走一份,第二个猴子也是这样,直到第5个猴子,问这堆桃子的最小是多少

public function index()
{
	for($i=2;;$i++)
	{
		if(self::x($i)==1){
			echo $i;
			break;
		}
	}
}

public function x($n)
{
	for($i=0;$i<5;$i++)
	{
		if(($n-1)%5!=0){
			return 0;
		}else{
			$n=($n-1)/5*4;
		}
	}
	return 1;
}

十进制到二进制的转换

public function index($n)
{	
	$str='';
	while($n!=0){
		$str.=$n%2;
		$n=intval($n/2);
	}
	for($i=strlen($str)-1;$i>=0;$i--)
	{
		echo substr($str, $i , 1);
	}
}

二进制到十进制的转化

public function index($n)
{	
	$j=0;
	$sum=0;
	for($i=strlen($n)-1;$i>=0;$i--)
	{
		$sum=$sum+intval(substr($n, $i , 1))*pow(2, $j++);
	}
	echo $sum;
}

将一个整数逆序后放入一个数组,要求递归实现

public function index($arr=[],$n)
{	
	if(strlen($n)>0){
		array_push($arr, substr($n, strlen($n)-1,1));
		self::index($arr,substr($n, 0, strlen($n)-1));
	}else{
		dump($arr);
	}
}

判断一组字符串是否是回文,例如(abba),递归实现

public function index($str)
{
	if(strlen($str)==1||$str==""){
		echo  "yes" ;
		die;
	}
	if(substr($str, 0 , 1)==substr($str, strlen($str)-1 ,1)){
		self::index(substr($str, 1 ,strlen($str)-2));
	}else{
		echo  "no";
	}
}

分解质因数,输入一个数,找出他所有的质因数

public function index($n)
{
	$str=$n.'=';
	$i=2;
	while ($i <= $n) {
		if($n%$i==0){
			$str=$str.$i."*";
			$n=$n/$i;
		}else
			$i++;
	}
	echo substr($str, 0, strlen($str)-1);
}

迷宫问题

public function getRes($num,$x,$y,&$result=[],$recode)
{	
	$ymax=count($num[0])-1;
	$xmax=count($num)-1;
	if($y>$ymax||$x>$xmax){
		return ;
	}elseif($num[$x][$y]=='0'){
		return ;
	}elseif($num[$x][$y]=='1'){
		array_push($recode,$x.$y);
		// halt($recode);
		if($x==$xmax&&$y==$ymax){
			$result=$recode;
			return;
		}
	}else{
		return;
	}
	self::getRes($num,$x,++$y,$result,$recode);
	self::getRes($num,++$x,--$y,$result,$recode);

}
//  主函数
public function index()
{
	$num=[
		[1,1,1,1,1,0],
		[0,1,0,1,0,1],
		[0,1,0,1,0,1],
		[0,1,1,1,1,1]
	];
	$result=[];
	self::getRes($num,0,0,$result,[]);
	dump($result);
}

座位随机分配问题

public function index()
{
	$arr=range(1, 50);
	$res=[];
	shuffle($arr);
	for($i=0;$i<count($arr);$i++){
		if($i==0){
			array_push($res, $arr[$i]);
			continue;
		}
		$end=end($res);
		if($end+1==$arr[$i]||$end-1==$arr[$i]){
			// 为了防止一个元素恰好在另一个元素第一个值和最后一个值中间做的操作
			if($res[0]+1==$arr[$i]||$res[0]-1==$arr[$i]){
				$arr[]=$arr[$i];
			}else{
				array_unshift($res, $arr[$i]);
			}		
		}else{
			array_push($res, $arr[$i]);
		}
	}
	dump($res);
}		

求一个字符串中的最大数字连续串

public function index($str)
{
	$arr=[];
	$common='';
	for($i=0;$i<strlen($str);$i++)
	{
		if(substr($str,$i,1)>='0'&&substr($str,$i,1)<='9'){
			$common.=$str[$i];
		}else{
			$arr[]=$common;
			$common='';
		}
	}
	dump($arr);
	$code=$arr[0];
	foreach ($arr as $value) {
		if(strlen($value)>strlen($code)){
			$code=$value;
		}
	}
	echo $code;
}

寻找子字符串在父字符串中第一次出现的位置

public function index($father,$children)
{
	for($i=1;$i<strlen($father);$i++){
		if(substr($father, $i , strlen($children))==$children){
			return $i;
		}
	}
	return 'no exists;';
}

字符串转整型 如+123=>123 a123=>0 -123=>123 123sss123=>123 123.01=>123

public function index($str)
{
	$first=substr($str,0,1);
	if(($first>='0'&&$first<='9')||($first=="+")||($first=="-")){
		$num='';
  		for($i=1;$i<strlen($str);$i++)
  		{	
  			$x=substr($str,$i,1);
  			if($x>='0'&&$x<='9'){
  				$num.=$x;
  			}else{
  				break;
  			} 
  		}
  		if($num==''){
  			return 0;
  		}
  		if($first=='+'){
  			return $num;
  		}else{
  			return $first.$num;
  		}
	}else{
		return 0;
	}	
}

哥德巴赫猜想,任何一个偶数都可以拆成连个素数之和,代码实现

public function index($n)
{
	// 先找出比n小的所有素数
	$arr=self::search($n);
	for($i=0;$i<count($arr);$i++)
	{	
		$x = $n-$arr[$i];
		if(array_search($x, $arr)){
			echo $n."=".$arr[$i]."+".$x;
			break;
		}
	}
}
// 检查一个数是否是素数
public function check($n)
{	
	if($n<=2){
		return "yes";
	}
	if($n%2==0){
		return "no";
	}
	for($i=3;$i<$n/2;$i++)
	{
		if($n%$i==0){
			return "no";
		}
	}
	return "yes";
}

// 找出小于n的所有素数
public function search($n)
{	
	$arr=[];
	for($i=1;$i<$n;$i++)
	{
		if(self::check($i)=="yes"){
			$arr[]=$i;
		}
	}
	return $arr;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值