AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 77580603
Accepted
ABGR
ABGR
Asked: 2023-12-01 01:38:44 +0800 CST2023-12-01 01:38:44 +0800 CST 2023-12-01 01:38:44 +0800 CST

有一个 4 位 PIN 码锁。按键的数字可以从 0-5 中选择。查找所有可能的按键组合

  • 772

问题是这样的:

有一个 4 位 PIN 码锁。必须从0-5要解锁的钥匙的数字中选择数字。

我们需要找到所有可能的组合,例如0001, 0002, 0003, 0004,等等。

javascript
  • 3 3 个回答
  • 52 Views

3 个回答

  • Voted
  1. Best Answer
    Lajos Arpad
    2023-12-01T01:54:40+08:002023-12-01T01:54:40+08:00

    您可以为数字创建一个数组,并递增前面的数字,直到找到不是 9 的数字,就像通常递增数字一样:

    let array = [0, 0, 0, 0];
    let output = [];
    do {
        output.push(array.join(""));
        let digitIndex = 3;
        while ((digitIndex >= 0) && (!(array[digitIndex] = (array[digitIndex] + 1) % 6))) digitIndex--;
    } while (array[0] + array[1] + array[2] + array[3]);
    
    console.log(output);

    • 1
  2. ABGR
    2023-12-01T01:38:44+08:002023-12-01T01:38:44+08:00

    以下是如何递归地解决该问题。

    我们需要将问题划分为子问题,并找到我们可以解决的最小子问题的解决方案。

    这给出了我们的基本情况,即对于0数字引脚,我们将有""

    现在让我们将问题分解为子问题并尝试解决它。我们用 尝试引脚的第一位数字0,然后我们只需解决其余三位数字的问题。如果我们尝试使用第一个数字1等等,情况也是如此。

    那么让我们继续这个

    function findAllCombo(){    
      var res=[];
      function computeRecursively(newStr="", locks, startIndex=0){
      
         //Base case
         if(startIndex === locks.length){
            res.push(newStr);
            return res;
          }
    
          // The digits have to be choosen form 0-5. So we recursively call for each of the 
          // digits. We can use loop as well.
    
          computeRecursively(newStr+0, locks, startIndex+1);
          computeRecursively(newStr+1, locks, startIndex+1);
          computeRecursively(newStr+2, locks, startIndex+1);
          computeRecursively(newStr+3, locks, startIndex+1);
          computeRecursively(newStr+4, locks, startIndex+1);
          computeRecursively(newStr+5, locks, startIndex+1);
          
          return res;
      
      }
    
      //This defines the lock- place to hold each digit
      var locks = new Array(4);
      return computeRecursively("", locks, 0)
    }
    
    console.log(findAllCombo())

    • 0
  3. Titus
    2023-12-01T03:23:16+08:002023-12-01T03:23:16+08:00

    这是我的方法,我可能让它变得比它必须的更复杂。我更专注于正确使用递归(没有全局变量,函数返回最终结果或对其自身的调用)。

    function recursion(digitsCount, range, currentCombo, results = []) {
      if (!currentCombo) {
        currentCombo = new Array(digitsCount).fill(0);
        results.push(currentCombo.join(''));
      }
      const newCombo = new Array(digitsCount);
    
      let flag = false;
      for (let i = digitsCount - 1; i >= 0; i--) {
        if (flag || i === digitsCount - 1 && !(i === 0 && currentCombo[0] === (range - 1))) {
          flag = currentCombo[i] === (range - 1);
          newCombo[i] = (currentCombo[i] + 1) % range;
        } else {
          newCombo[i] = currentCombo[i];
        }
      }
      results = [...results, newCombo.join('')];
      if (newCombo.every((n) => n === (range - 1))) {
        return results;
      }
      return recursion(digitsCount, range, newCombo, results);
    }
    
    
    const range = 6; // from 0 to 5 there are 6 digits
    const digitsCount = 4;
    
    console.log(recursion(digitsCount, range));

    如果可以是变量,则需要其中的循环for(或者至少需要另一个递归函数) 。digitsCount

    这种方法的主要驱动力是使用模数 ( %) 和flag变量来进行计数range(在本例中为基于5)。

    • 0

相关问题

  • 合并排序不起作用 - Javascript代码:即使在调试后也无法找到错误

  • select.remove() 方法工作得很奇怪[关闭]

  • useOpenWeather() 中总是出现 401 res -react-open-weather lib [重复]

  • 输入元素没有只读属性,但字段仍然不可编辑[关闭]

  • 如何编辑 D3.js RadialTree 的第一个节点半径?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    使用 <font color="#xxx"> 突出显示 html 中的代码

    • 2 个回答
  • Marko Smith

    为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类?

    • 1 个回答
  • Marko Smith

    您可以使用花括号初始化列表作为(默认)模板参数吗?

    • 2 个回答
  • Marko Smith

    为什么列表推导式在内部创建一个函数?

    • 1 个回答
  • Marko Smith

    我正在尝试仅使用海龟随机和数学模块来制作吃豆人游戏

    • 1 个回答
  • Marko Smith

    java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duratio

    • 3 个回答
  • Marko Smith

    为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)?

    • 4 个回答
  • Marko Smith

    为什么库中不调用全局变量的构造函数?

    • 1 个回答
  • Marko Smith

    std::common_reference_with 在元组上的行为不一致。哪个是对的?

    • 1 个回答
  • Marko Smith

    C++17 中 std::byte 只能按位运算?

    • 1 个回答
  • Martin Hope
    fbrereto 为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 您可以使用花括号初始化列表作为(默认)模板参数吗? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi 为什么列表推导式在内部创建一个函数? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A fmt 格式 %H:%M:%S 不带小数 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python C++20 的 std::views::filter 未正确过滤视图 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute 为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa 为什么库中不调用全局变量的构造函数? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis std::common_reference_with 在元组上的行为不一致。哪个是对的? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev 为什么编译器在这里错过矢量化? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan C++17 中 std::byte 只能按位运算? 2023-08-17 17:13:58 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve