求一个程序,内容是这样的,我举个例子:将9、4、3、2这四个数随机组合,使每组中的数之和≤10

求一个程序,内容是这样的,我举个例子:将9、4、3、2这四个数随机组合,使每组中的数之和≤10
再举个实际的例子:我家有很多根10米长的绳子,现在我要剪出9米的,4米的,3米的,2米的总共四节,如何剪才能最省?
4米的、3米的、2米的在一根绳子上剪,9米的在一根绳子上剪,最少总共需要2根绳子,是最省的.
程序中的需要自定义的项目分别是:我家这些绳子的长度L,要剪断的长度A,B,C,D,E,F,G,H.
Amanda1122 1年前 已收到1个回答 举报

多情游子 幼苗

共回答了19个问题采纳率:94.7% 举报

php给你个思路
//采用递归
$_length_array = array(1,2,2,2,2,3,3,5,6,7,8,9,9,9,9,9);//需要剪切的绳子
$_len = 10;//一根绳子的长度
$_num = 0;//用掉多少条绳子
$_has_len = $_len;//一根绳子还剩多长 初始为$_len
if (0 < count($_length_array)) {
//如果有数据,至少为1
$_num = 1;
}
getNum();
function getNum()
{
global $_length_array;
global $_len;
global $_num;
global $_has_len;
//循环数组中的每个长度
foreach ($_length_array as $_key=>$_val) {
if ($_has_len>$_val) {
//如果剩下的绳子大于当前长度 就把当前的剪掉
$_has_len = $_has_len-$_val;
unset($_length_array[$_key]);//把它从数组中去掉
if (0 == $_has_len) {
//如果绳子被剪完 num++
$_num++;
getNum();
return;
}
//在数组中寻找是否有剩下绳子长度
$_other_key = array_search($_has_len,$_length_array);
if ($_other_key) {
//如果存在,num++
unset($_length_array[$_other_key]);
$_num++;
$_has_len = $_len;
getNum();
return;
} else {
getNum();
return;
}
} else {
$_num++;
$_has_len = $_len;
getNum();
return;
}
}
}
echo $_num;
exit;

1年前

8
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 18 q. 0.493 s. - webmaster@yulucn.com