最小公倍数 [Javascript 挑战]
Posted
技术标签:
【中文标题】最小公倍数 [Javascript 挑战]【英文标题】:Smallest Common Multiple [Javascript Challenge] 【发布时间】:2020-10-12 19:49:12 【问题描述】:问题:找到所提供参数的最小公倍数,该公倍数可以被两者以及这些参数之间范围内的所有序号均分。
范围将是一个由两个数字组成的数组,不一定按数字顺序。
例如,如果给定 1 和 3,求 1 和 3 的最小公倍数,它也能被 1 和 3 之间的所有数整除,即能被 1、2 和 3 整除。这里的答案是 6 .
function smallestCommons(arr)
var max=Math.max(...arr);
var min=Math.min(...arr);
var flag = 0;
var i = min;
while(true)
for(var j=min;j<=max;j++)
if(i%j!=0)
flag=1;
break;
if(flag==0)
flag=5;
break;
i++;
console.log(i);
smallestCommons([1,5]);
由于某种原因,我的解决方案似乎变得疯狂并进入无限循环。尽管如果我将 var i 初始化为 60(这是此特定情况下所需的输出,即 [1,5]),则解决方案似乎很好。有什么修正或猜测吗?
【问题讨论】:
使用调试器 是的,我试过调试。但这一切似乎都不起作用。我对这一切都比较陌生。因此我很难调试。 *** 会知道的。 ._. 当您将标志设置为不同于 0 的值时,您的循环将变为无限。只有在 flag = 0 时才停止 while 循环。 @AdilAhmed 调试是编程中的一项关键技能。这是你现在应该花一些时间学习的东西 不错!很高兴您确实找到了解决方案。 【参考方案1】:感谢主要 cmets 部分中的两个编程极客,我确实找到了解决方案。
function smallestCommons(arr)
var max=Math.max(...arr);
var min=Math.min(...arr);
var flag = 0;
var count = 0;
var i = 1;
while(1)
for(var j=min;j<=max;j++)
if(i%j!=0)
flag=1;
break;
if(j==max)
flag=0;
if(flag==0)
break;
i++;
console.log(i);
smallestCommons([10,2]);
【讨论】:
【参考方案2】:@Kevin 很好地解释了为什么它不起作用。仅当 flag
为 0
时,您的循环才会停止。但是一旦它被设置为1
,你就永远不会将它重置为0
。
function smallestCommons(arr)
var max = Math.max(...arr);
var min = Math.min(...arr);
var flag = 0;
var i = min;
while (true)
for (var j = min; j <= max; j++)
if (i % j != 0)
flag = 1;
break;
if (flag == 0)
return i; // Return that common value
flag = 0; // Reset the flag
i++;
console.log(smallestCommons([1, 5]));
这是另一种方法:
function smallestCommons(arr)
const min = Math.min(...arr),
max = Math.max(...arr),
range = createRange(min, max);
let current = max;
while (true)
const isFullyDivisible = range.every(n => current % n === 0);
if (isFullyDivisible)
return current;
current++;
function createRange(min, max)
return new Array(max - min + 1).fill(null).map((_, i) => min + i);
console.log(smallestCommons([1, 3])); // 6
console.log(smallestCommons([5, 1])); // 60
console.log(smallestCommons([1, 10])); // 2520
【讨论】:
是的,伙计。这完美地工作。我确实花了一些时间来理解你的代码,但现在我明白了,我可以肯定地说我的疑问已经消除了。感谢您的时间。 :)以上是关于最小公倍数 [Javascript 挑战]的主要内容,如果未能解决你的问题,请参考以下文章