每个程序员半小时内必须解决的5个编程问题——php实现
来源:互联网 发布:gta5男角色捏脸数据 编辑:程序博客网 时间:2024/06/13 07:31
问题4
编写一个能将给定非负整数列表中的数字排列成最大数字的函数。例如,给定[50,2,1,9],最大数字为95021。
解决方式1
主要思路为将数组按每个数的第一个数字大小进行倒序排序,然后按顺序进行字符串拼接
function question4(){ $arr= [50,2,1,9]; $tmp = []; for($i = 0; $i < count($arr); $i++){ $tmp[$i] = substr($arr[$i],0,1); //[5,2,1,9] } arsort($tmp); //[3=>9,0=>5,1=>2,2=>1] $re = ''; foreach($tmp as $k=>$v){ $re .= $arr[$k]; } var_dump($re);}
问题5
编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。例如:1 + 2 + 34 – 5 + 67 – 8 + 9 = 100。
解决方式1
public function question5(){ $arr = range(1,9); //生成1~9的数组 $symbol = ['+','-','']; //定义运算符 $result = 100; //目标结果 te3($arr, '',$result, $symbol);}/* * 递归,穷举所有的可能性,并将满足条件的运算式输出 * @param array $arr [使用的数组] * @param string $formula [根据$arr和运算符拼接的运算式] * @param int $result [目标结果] * @param array $divisors [运算符集合] */function te3($arr, $formula, $result, $divisors=['+'.'-','']){ //每次递归会将$arr中的第一个元素取出并删除 //如果$arr的长度为1,表示只剩最后一个数,递归结束 if(count($arr) == 1){ $formula .= $arr[0]; if(te3_cal($formula, $result)){ echo $formula .'<br>'; } }else{ //每次递归将$arr的第一个元素拼接到运算式中,然后将该元素删除 $formula .= $arr[0]; array_shift($arr); //遍历所有运算符,每拼接一个数字,就遍历该情况下的所有可能 //并将每一种可能都进行一次递归 foreach($divisors as $divisor){ te3($arr, $formula.$divisor, $result, $divisors); } }}/* * 计算运算式,并得出其与目标结果的比较结果,也可以使用eval函数 * @param string $formula [运算式,例:"1-2+34+5-67+89"] * @param int $result [目标结果] */function te3_cal($formula,$result){// $formula = '1-2-34+5-6+78+9'; //51// $formula = '12+3-45+6+78-9'; //45 $temp = explode('-',$formula); // 按-号分割运算式 $re = 0; //保存运算结果 $count = 0; //运算次数 $count_j = 0; //+法运算次数 foreach($temp as $v){ //如果是数字,就进行计算,否则以+号进行分割 if(is_numeric($v)){ //如果未进行过运算,那么就是第一个数,第一个数无符号 if($count == 0){ $re = $v; }else { //如果不是第一个数,则进行减法运算 $re -= $v; } }else{ $add_tmp = explode('+',$v); foreach($add_tmp as $vv){ if(is_numeric($vv)){ if($count == 0){ $re = $vv; $count ++; }else { if ($count_j == 0) { $re -= $vv; } else { $re += $vv; } } $count_j++; } } $count_j = 0; } $count++; } if($re == $result){ //判断运算结果与目标结果是否相同 return true; }else{ return false; }}
阅读全文
0 0
- 每个程序员半小时内必须解决的5个编程问题——php实现
- php版 - 每个程序员1小时内必须解决的5个编程问题
- 每个程序员1小时内必须解决的5个编程问题(未完成)
- 每个程序员1小时内必须解决的5个编程问题
- 每个程序员1小时内必须解决的5个编程问题之难题
- 每个程序员1小时内必须解决的5个编程问题之多种方法
- java学习练习(每个程序员1小时内必须解决的5个编程问题)
- 每个程序员1小时内必须解决的5个编程问题--解答代码
- 每个程序员1小时内必须解决的5个编程问题 - 个人答题
- 每个程序员1小时内必须解决的5个编程问题
- 每个程序员1小时内必须解决的5个编程问题
- 每个程序员1小时内必须解决的5个编程问题
- 程序员必须1小时内解决的5个编程问题
- 1小时内必须解决的5个编程问题
- 【程序员思想】每个程序员都必须遵守的编程原则
- 每个程序员都必须遵守的编程原则
- 每个程序员都必须遵守的编程原则
- 每个程序员都必须遵守的编程原则
- 为什么扫描枪只能扫入数字但是扫不进字母
- PAT甲级1003. Emergency (25)
- 指针方面的小问题
- 关于在n进制下,显示的等式成立。求当前进制。
- 古文觀止卷八_与于襄阳书_韓愈
- 每个程序员半小时内必须解决的5个编程问题——php实现
- 闭包的秘密
- 回溯算法解决迷宫问题
- Spring @EnableScheduling 注解解析
- 表格进度条
- R类型转换
- 通信对象 System.ServiceModel.ServiceHost 无法用于通信,因为其处于“出错”状态。
- XML(扩展标记语言)学习笔记
- python进阶--补-冒泡排序