簡體   English   中英

免費代碼訓練營算法

[英]Free code camp algorithm

我一直被這個免費的代碼訓練算法所困,確實需要一些幫助。

這是我應該做的:

找到所提供參數的最小公倍數,它們可以被這兩個參數以及這些參數之間范圍內的所有序號均分。

范圍將是兩個數字的數組,不一定按數字順序。

例如,對於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進行檢查,但是它說我有一個無限循環。

所以這是我的解決方案,希望您能從中找到啟發:

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

 function smallestCommons(arr) { arr.sort((a,b)=>ab); 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])); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM