您的位置:首页 > 职场人生

一个上市公司的面试题太变态了谁能解出来?高手来看

2008-06-30 22:24 260 查看
一个上市公司的面试题太变态了谁能解出来?高手来看A:80B:158C:464D:608E:1326F:5164G:2724H:1452分别有以上8个产品冒号后面是价格要求用户输入一个价格比如1166然后程序要算出可能有的集中产品价格总和为1166的排列组合例如:1166=80+158+464+464排列为ABC(2)[如果有多种可能也要列举出来有可能2个A2个B1个C类似这种]那个高手能用穷举组合做做看这道难题目那?
<?php
/**
*过滤大于input的数组单元
*
*@parammix$val
*@returnboolean
*/
functionrealFilter($val){
return$val<$GLOBALS['input'];
}
/**
*获取组成的列表
*
*@paramint$input
*@returnarray
*/
functiongetList($input){
$price=$GLOBALS['price'];
//初始价格数组
$price=array_filter($price,'realFilter');
//低于最小的元素
if(!$price){
exit();
}
rsort($price);
//初始化
$stack=array(-1=>0);
$length=count($price);
$lists=array();
//循环放入堆栈
$i=0;
$break=false;
do{
//压栈
if(array_sum($stack)<$GLOBALS['input']){
array_push($stack,$price[$i]);
}else{
//记录组合
if(array_sum($stack)==$GLOBALS['input']){
//格式化这里
$lists[]=formatList($stack);
}
//出栈
do{
$last=array_pop($stack);
if($last==0){
$stack=array(-1=>0);
$break=true;
break;
}
$i=array_search($last,$price);
$i++;
}while($i>=$length);
if($break)break;
}
}while(true);
return$lists;
}
/**
*格式化$stack数组
*
*@paramarray$stack
*@returnarray
*/
functionformatList($stack){
foreach($stackas$key=>$value){
if($value==0){
unset($stack[$key]);
continue;
}
$stack[$key]=$GLOBALS['type'][array_search($value,$GLOBALS['price'])];
}
return$stack;
}
$price=array(80,158,464,608,1326,5164,2724,1452);
$type=array('A','B','C','D','E','F','G','H');
$input=2000;
var_dump(getList($input));
?>

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐