上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

简易货币问题条件满足提前中止

[复制链接]
  • TA的每日心情
    开心
    2023-2-28 23:59
  • 签到天数: 191 天

    [LV.7]常住居民III

    638

    主题

    5234

    回帖

    6105

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6105

    荣誉开发者管理员油中2周年生态建设者喜迎中秋

    发表于 2023-12-28 07:09:09 | 显示全部楼层 | 阅读模式
    arr是货币数组,其中的值都是正数。再给定一个正数aim。
    每个值都认为是一张货币,
    认为值相同的货币没有任何不同,
    返回组成aim的方法数
    例如:arr = {1,2,1,1,2,1,2},aim = 4
    方法:1+1+1+1、1+1+2、2+2
    一共就3种方法,所以返回3

    如果满足条件提前终止不会导致出错
    简易对数器及代码如下

    function process1(arr, index, rest) {
      if (rest < 0) {
        return 0;
      }
      if (index == arr.length) {
        return rest == 0 ? 1 : 0;
      } else {
        return (
          process1(arr, index + 1, rest) +
          process1(arr, index + 1, rest - arr[index])
        );
      }
    }
    function process2(arr, index, rest) {
      if (rest < 0) {
        return 0;
      }
      if (rest == 0) {
        return 1;
      }
      if (index == arr.length) {
        return 0;
      }
      return (
        process2(arr, index + 1, rest) + process2(arr, index + 1, rest - arr[index])
      );
    }
    function randomTest() {
      for (let index = 0; index < 10000; index++) {
        const target = parseInt(Math.random() * 100);
        const arr = [1, 3, 5, 7, 9, 10, 20, 30, 50, 70, 100];
        if (process1(arr, 0, target) !== process2(arr, 0, target)) {
          console.log("err");
          break;
        }
      }
    }
    randomTest();
    
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表