用PHP程序计算 1到50任意6个数相的和等于100
答案:1 悬赏:30 手机版
解决时间 2021-04-03 23:10
- 提问者网友:人生佛魔见
- 2021-04-03 05:36
用PHP程序计算 1到50任意6个数相的和等于100
最佳答案
- 五星知识达人网友:像个废品
- 2021-04-03 05:54
注意,如果是7个数字,那么运行时间可能很长,5位需要22s左右,6位约110s,依次*50
function getTime() {
list($msec, $sec) = explode(' ', microtime());
return round($sec * 1000, 4) + $msec;
}
$start_time = getTime();
$min = 1; // 最小值
$max = 50; // 最大值
$num = 5; // 多少个数字
$sum = 100; // 和
$rs_cnt = 0; // 结果数
$rs_list = []; // 结果列表
$val_list = [];
$val_list = array_pad([], $num, $min);
while (true) {
// 递增
for ($j = $min; $j <= $max; $j += 1) {
$val_list[0] = $j;
if (array_sum($val_list) === $sum) {
// $rs_list[] = $val_list; // 保存结果列表
$rs_cnt += 1;
}
}
// 进位
for ($k = 0; $k < $num - 1; $k += 1) {
if ($val_list[$k] >= $max) {
$val_list[$k] = $min;
$val_list[$k + 1] += 1;
}
}
// 当最高位达到max 退出
if ($val_list[$num - 1] > $max) {
break;
}
}
$end_time = getTime();
//var_dump($rs_list);
var_dump($rs_cnt);
echo $end_time - $start_time, 'ms';
function getTime() {
list($msec, $sec) = explode(' ', microtime());
return round($sec * 1000, 4) + $msec;
}
$start_time = getTime();
$min = 1; // 最小值
$max = 50; // 最大值
$num = 5; // 多少个数字
$sum = 100; // 和
$rs_cnt = 0; // 结果数
$rs_list = []; // 结果列表
$val_list = [];
$val_list = array_pad([], $num, $min);
while (true) {
// 递增
for ($j = $min; $j <= $max; $j += 1) {
$val_list[0] = $j;
if (array_sum($val_list) === $sum) {
// $rs_list[] = $val_list; // 保存结果列表
$rs_cnt += 1;
}
}
// 进位
for ($k = 0; $k < $num - 1; $k += 1) {
if ($val_list[$k] >= $max) {
$val_list[$k] = $min;
$val_list[$k + 1] += 1;
}
}
// 当最高位达到max 退出
if ($val_list[$num - 1] > $max) {
break;
}
}
$end_time = getTime();
//var_dump($rs_list);
var_dump($rs_cnt);
echo $end_time - $start_time, 'ms';
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯