我一直被困在这个免费的代码阵营算法中,真的需要一些帮助。
这就是我应该做的:
找到所提供的参数的最小公倍数,该参数可以被这两个参数以及这些参数之间范围内的所有序列号平均除。
范围将是一个由两个数字组成的数组,这两个数字不必按数字顺序排列。
例如,对于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]);我试着用欧几里德的算法来解决这个问题,我认为它很难,尝试了for循环,但是不能,我现在正试着用.every检查,但是它说我有一个无限循环。
发布于 2016-09-14 13:19:29
所以这是我的解决方案,我希望你会发现它很有启发性:
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;
}发布于 2017-06-30 05:41:36
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]));
https://stackoverflow.com/questions/38088228
复制相似问题