用PHP程序计算 1到50任意6个数相的和等于100 20

1-50的数字中,任意7个数的和等于100,要用PHP程序计算显示这7个数有多少种组合,100是任意输入的;输入120也要计算1-50的数字中任意7个数的和为120有多少... 1-50的数字中,任意7个数的和等于100,要用PHP程序计算显示这7个数有多少种组合,100是任意输入的;输入120也要计算1-50的数字中任意7个数的和为120有多少种组合,谢谢! 展开
 我来答
百度网友6956f15
2017-10-29 · TA获得超过281个赞
知道小有建树答主
回答量:205
采纳率:85%
帮助的人:128万
展开全部

注意,如果是7个数字,那么运行时间可能很长,5位需要22s左右,6位约110s,依次*50

<?php

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';
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式