php版 - 每个程序员1小时内必须解决的5个编程问题

原创 2015年11月16日 18:13:18

6月份看到的五道题,自己做了下,感觉有点意思,前四个很简单,最后一个有点难,用了笨办法做出来了

//1、使用for循环、while循环和递归写出3个函数来计算给定数列的总和。
echo '1 - <br>';
$str='1,5,6,8,9,4,2';
echo "<pre>";
print_r(fun1($str));
echo "</pre>";
function fun1($str){
	$arr=explode(',',$str);
	$count=count($arr);
	$numfor=$numwhile=$numdeep=0;
	for($i=0;$i<$count;$i++){
		$numfor+=$arr[$i];
	}
	$return['numfor']=$numfor;
	$w=0;
	while($w<$count){
		$numwhile+=$arr[$w];
		$w++;
	}
	$return['numwhile']=$numwhile;
	$return['numdeep']=numdeep($arr,$count);
	return $return;
}

function numdeep($arr,$count){
	static $num;
	if($count>=0){
		$num+=@$arr[$count];
		numdeep($arr,--$count);
	}
	return $num;
}
//2、编写一个交错合并列表元素的函数。例如:给定的两个列表为[a,B,C]和[1,2,3],函数返回[a,1,B,2,C,3]。
echo '2 - <br>';
$arr1=array('a','B','C');
$arr2=array(1,2,3);
echo "<pre>";
print_r(fun2($arr1,$arr2));
echo "</pre>";
function fun2($arr1,$arr2){
	$new=array();
	$count=count($arr1);
	for($i=0;$i<$count;$i++){
		$new[]=$arr1[$i];
		$new[]=$arr2[$i];
	}
	return $new;
}
//3、编写一个计算前100位斐波那契数的函数。根据定义,斐波那契序列的前两位数字是0和1,随后的每个数字是前两个数字的和。例如,前

10位斐波那契数为:0,1,1,2,3,5,8,13,21,34。
echo '3 - <br>';
fun3();
function fun3(){
	$num=100;
	$arr=array(0,1);
	for($i=0;$i<$num;$i++){
		$count=count($arr);
		if($arr[$count-1]>=$num){
			unset($arr[$count-1]);
			break;
		}elseif($count==2){
			$arr[]=1;
		}else{
			$arr[]=$arr[$count-1]+$arr[$count-2];
		}
	}
	echo join(',',$arr).' <br>';
}

//4、编写一个能将给定非负整数列表中的数字排列成最大数字的函数。例如,给定[50,2,1,9],最大数字为95021。
echo '4 - <br>';
fun4();
function fun4(){
	$arr=array(50,2,1,9);
	$count=count($arr);
	$new=array();
	foreach($arr as $k=>$v){
		$new[]=substr($v,0,1);
	}
	arsort($new);
	$str='';
	foreach($new as $k=>$v){
		$str.=$arr[$k];
	}
	echo $str;
}

//5、编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。
//例如:1 + 2 + 34 – 5 + 67 – 8 + 9 = 100。
fun5();
function fun5(){
	$arr=array(1,2,3,4,5,6,7,8,9);//8
	$t=array('+','-','');//3^8
	$may=array();
	$countt=count($t);
	for($a=0;$a<$countt;$a++){
		for($b=0;$b<$countt;$b++){
			for($c=0;$c<$countt;$c++){
				for($d=0;$d<$countt;$d++){
					for($e=0;$e<$countt;$e++){
						for($f=0;$f<$countt;$f++){
							for($g=0;$g<$countt;$g++){
								for($h=0;$h<$countt;$h++){
									$str = "1$t[$a]2$t[$b]3$t[$c]4$t[$d]5$t[$e]6$t[$f]

7$t[$g]8$t[$h]9";
								//	$may[]=$str;
									$tmpnum = '';
									eval("\$tmpnum=1$t[$a]2$t[$b]3$t[$c]4$t[$d]5$t[$e]

6$t[$f]7$t[$g]8$t[$h]9;");
									if($tmpnum==100){
										$may[]=$str.' = 100';
									}
								}
							}
						}
					}
				}
			}
		}
	}
	echo "<pre>";
	print_r($may);
	echo "</pre>";
}
第五题,之前就想过要用递归实现,一直没想到,今天看到有人用js 实现了,照着 copy 份 php的实现方法

$str='1,2,3,4,5,6,7,8,9';
$data = [];
fun5($str,'');
function fun5($str,$pre){
	global $data;
	$a = explode(',',$str);
	$t = str_replace(',','',$str);
	if(strlen($t)==2){
		$data[] = $pre.(join('+',$a));
		$data[] = $pre.(join('-',$a));
		$data[] = $pre.$t;
	}else{
		$c = $a[0];
		unset($a[0]);
		$s = join(',',$a);
		fun5($s, $pre.$c.'+');
		fun5($s, $pre.$c.'-');
		fun5($s, $pre.$c);
	}
}

foreach($data as $k=>$v){
	eval("\$num = $v;");
	if($num==100){
		echo $v.' = 100<br>';
	}
}

附上js 的解题方法

var str = "123456789";
var ways = [];

function exec(str, pre) {
    var a = str.split("");
    if( str.length === 2 ){
        ways.push( pre + a.join("+") );
        ways.push( pre + a.join("-") );
        ways.push( pre + str );
    }else{
        var c = str.charAt(0),
            s = str.substring(1);
        exec( s, pre + c + "+" );
        exec( s, pre + c + "-" );
        exec( s, pre + c );
    }
}
exec( str, "" );

for (var i = 0; i < ways.length; i++) {
    if( eval( ways[i] ) === 100 ){
        console.log( ways[i] + " = 100" );
    }
};



版权声明:本文为博主原创文章,未经博主允许不得转载。

每个程序员1小时内必须解决的5个编程问题--解答代码

每个程序员1小时内必须解决的5个编程问题,我的解答代码
  • u013073227
  • u013073227
  • 2015年05月16日 18:09
  • 766

每个程序员1小时内必须解决的5个编程问题

每次我发布软件工程师的岗位工作要求,各种求职申请就会纷至沓来,接踵而至。但每每让我困惑的是,似乎总有那么几位应聘者完全不明白所谓“编程”的意思。   当然,他们另有想法。 ...
  • shengxiaweizhi
  • shengxiaweizhi
  • 2015年05月11日 22:31
  • 366

每个程序员1小时内必须解决的5个编程问题(未完成)

每次我发布软件工程师的岗位工作要求,各种求职申请就会纷至沓来,接踵而至。但每每让我困惑的是,似乎总有那么几位应聘者完全不明白所谓“编程”的意思。 当然,他们另有想法。 而我认为,如果你应聘...
  • u013372487
  • u013372487
  • 2015年05月11日 20:55
  • 514

1小时内必须解决的5个编程问题

算法 程序员
  • u012762106
  • u012762106
  • 2015年08月20日 18:33
  • 214

程序员必须1小时内解决的5个编程问题

前几天码农网上以为资深工程师提出来的问题,一时间网上答案各种,这里我简单整理了一下,代码来源为JAVA吧,当然随着时间的推移各种版本答案还在不断涌现,大家仅供参考 package com.zsq.f...
  • xq43701200
  • xq43701200
  • 2015年05月17日 23:25
  • 636

每个程序员半小时内必须解决的5个编程问题——php实现

function te3($arr, $formula, $result, $divisors=['+'.'-','']){ if(count($arr) == 1){ $fo...
  • u012720371
  • u012720371
  • 2017年08月25日 11:48
  • 144

每个程序员1小时内必须解决的5个编程问题之难题

昨天看到一篇文章说,软件开发人员应一小时完成的5道题,其中第5道题,还是比较难的。看了一下作者的原来解题思路,就是采用治减法,这是一类问题的算法题,如果没有接触过,确实有点难度。作者提供了JAVA的源...
  • caimouse
  • caimouse
  • 2015年05月13日 14:02
  • 2426

每个程序员1小时内必须解决的5个编程问题 - 个人答题

2015.05.10在SCDN中看到了一篇《每个程序员1小时内必须解决的5个编程问题》的博文 问题如下: 问题1:使用for循环、while循环和递归写出3个函数来计算给定数列的总和。 问题2:...
  • baidu_26183805
  • baidu_26183805
  • 2015年05月17日 17:48
  • 529

java学习练习(每个程序员1小时内必须解决的5个编程问题)

前天在博客头条上看到这样一个帖子,《每个程序员1小时内必须解决的5个编程问题》http://www.codeceo.com/article/5-problems-programmer-1-hour.h...
  • Heavy_ANT
  • Heavy_ANT
  • 2015年05月14日 14:14
  • 352

每个程序员1小时内必须解决的5个编程问题之多种方法

在这几天里,不断有各种方法涌现出来,下面就来贴上几个解决方法,如果按这些方法,真的不用一个小时就完工,关键要你想得到!下面是问题:问题3编写一个计算前100位斐波那契数的函数。根据定义,斐波那契序列的...
  • caimouse
  • caimouse
  • 2015年05月14日 12:41
  • 2202
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:php版 - 每个程序员1小时内必须解决的5个编程问题
举报原因:
原因补充:

(最多只允许输入30个字)