【问题标题】:Free code camp algorithm免费代码阵营算法
【发布时间】:2016-10-31 11:46:11
【问题描述】:

我一直卡在这个免费的代码营地算法中,真的需要一些帮助。

这是我应该做的:

找到所提供参数的最小公倍数,该公倍数可以被两者以及这些参数之间范围内的所有序号均分。

范围将是一个由两个数字组成的数组,不一定按数字顺序。

例如对于 1 和 3 - 找到 1 和 3 的最小公倍数,它可以被 1 和 3 之间的所有数字整除。

我必须检查我的 arr 中的每个值是否可以被我的公倍数整除,并且真的无法完成它。

这是我目前所拥有的:

function smallestCommons(arr) {
  arr = arr.sort();
  var number = arr[0];
  var secArr = [];
  // create a new list with all values to check against.
  while (number >= arr[0] && number <= arr[1]) {
    secArr.push(number);
    number++;
  }

  var commonMultiple = 1;
  var isTrue = true;

  function isDivisible(item) {
    if (item % commonMultiple === 0) {
      return true;
    }
    else {
      return false;
    }
  }

  while (isTrue) {
    commonMultiple++;
    if (secArr.every(isDivisible)) {
        isTrue = false;
    }
  }
  return commonMultiple;
}

smallestCommons([5,1]);

我试图用 Euclid 的算法解决这个问题,并认为这很难,尝试使用 for 循环但不能,我目前正在尝试使用 .every 进行检查,但它说我有一个无限循环。

【问题讨论】:

标签: javascript arrays algorithm


【解决方案1】:

所以这是我的解决方案,我希望你觉得它很有启发性:

function smallestCommons(arr) {
  var min = Math.min(arr[0], arr[1]);
  var max = Math.max(arr[0], arr[1]);

  var smallestCommon = min * max;

  var doneCalc = 0;

  while (doneCalc === 0) {
    for (var i = min; i <= max; i++) {
      if (smallestCommon % i !== 0) {
        smallestCommon += max;
        doneCalc = 0;
        break;
      }
      else {
        doneCalc = 1;
      }
    }
  }

  return smallestCommon;
}

【讨论】:

    【解决方案2】:

    function smallestCommons(arr) {
      arr.sort((a,b)=>a-b);
      var sm = arr[0];
      var lg = arr[1];
      var j = 0;
      var mul;
      var checkNumber = function(num) {
        for(var i = sm; i <= lg; i++) {
           if(num%i !== 0)
              return false;
        }
        return true;
      };
      
      do{
        j++;
         mul = sm * lg * j;
        
      } while(checkNumber(mul) !== true);
      
      
      return mul;
    }
    
    
    console.log(smallestCommons([1,5]));

    【讨论】:

    • 请添加您的代码解决 OP 问题的原因。如果用户不知道他做错了什么或者你的答案为什么解决了他的问题,那么仅仅让代码正常工作并不总是足够的。请看how to answer
    猜你喜欢
    • 1970-01-01
    • 2021-03-11
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    相关资源
    最近更新 更多