1. 程式人生 > >FCC 中級算法題 最小公倍數

FCC 中級算法題 最小公倍數

www. common objects java function center func .com target

Smallest Common Multiple


找出能被兩個給定參數和它們之間的連續數字整除的最小公倍數。

範圍是兩個數字構成的數組,兩個數字不一定按數字順序排序。

例如對 1 和 3 —— 找出能被 1 和 3 和它們之間所有數字整除的最小公倍數。

Smallest Common Multiple

思路:

(1)找出所給值的最大值和最小值;

(2)給最大值分別乘以1到100000裝入數組maxArr中;

(3)將所給的兩個數值及其中間的數按順序裝入數組newArr中;

(4)將最大值的倍數分別和newArr的各個數值相除,然後比較;

(5)返回第一個能把newArr所有元素整除的最小值;

知識點:

(1)Math.max.apply(null, Array)函數可以找出一組數的最大值;

(2)這個數值可以自由設定,本來想讓他為newArr各個元素相乘的數值,但有時候數值太大,容易引起崩潰;

1  for (var k = 0; k < 100000; k++) {
2        //給最大值乘以1到100000裝入數組maxArr中
3          maxArr.push(max * (k + 1));
4      }

代碼:

 1 function smallestCommons(arr) {
 2     var newArr = [];
 3     var maxArr = [];
4 var num = 1; 5 var max = Math.max.apply(null, arr); 6 var min = Math.min.apply(null, arr); 7 8 9 for (var k = 0; k < 100000; k++) { 10 //給最大值乘以1到100000裝入數組maxArr中 11 maxArr.push(max * (k + 1)); 12 } 13 for (var i = min; i < max + 1; i++) { 14 //將所給的兩個數值及其中間的數按順序裝入數組newArr中
15 newArr.push(i); 16 } 17 18 for (var j = 0; j < maxArr.length; j++) { 19 var b = 1; 20 for (var m = 0; m < newArr.length; m++) { 21 //將最大值的倍數分別和newArr的各個數值相除,然後比較 22 if (maxArr[j] % newArr[m] !== 0) { 23 b = 0; 24 } 25 } 26 if (b === 1) { 27 //返回第一個能把newArr所有元素整除的最小值 28 return maxArr[j]; 29 } 30 } 31 } 32 smallestCommons([1, 13]);

FCC 中級算法題 最小公倍數