免费代码阵营算法

时间:2016-06-29 00:07:58

标签: javascript arrays algorithm

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

这就是我应该做的:

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

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

e.g。对于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但它说我有一个无限循环。

2 个答案:

答案 0 :(得分:0)

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

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;
}

答案 1 :(得分:-1)

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]));