關於js的一個筆試編程題


這次筆試的時候,我遇見了一個筆試題目,我覺得這個題目,真的體現了數學之美,我的天,你自己抓破腦子,啊啊啊啊啊,我該怎么辦,然后,你一看答案,有一種醍醐灌頂的感覺,然后拍一拍自己的小腦瓜,唉聲嘆氣,哎,我自己怎么就沒想到呢 
題目如下 
最小因子,只有2和3和5的數,稱作丑數(Ugly Number)。例如6、8都是丑數,但14不是,因為它包含因子7。習慣上我們把1當做是第一個丑數。現在求出第n個丑數 
首先我們把題目搞懂,這個丑數就是,他的最小的因子,只能是2,3,5,比如數字 8,可以分解為2*4,但是4又可以繼續的分解為2*2,所以是丑數 
自己想的話,要想很久的,站在前輩的肩膀上,看看人家是用什么樣子的方法解決的。 
第一步:把這些丑數,存在數組里面,那么arr[0]=1 
第二步:后面的數字,都是前面數字的2,3,5倍,那么我們得到一組數字1*2 , 1*3 , 1*5,找出其中最小的數字,也就是2,插入到數組中去,此時數組變成 [1,2] 
第三步,取出數組的2,乘以2,得到4,第二步的時候,我們取走了1,還剩下數字3和數字5,我們比較3,4,5。找出最小數字3,加入到數組當中,此時數組變成了[1,2,3] 
第四步:我們取出數組的最后一個數字,重復第三步的操作,得到6,然后比較5,4,6,得到4,插入數組 
然后就是一直的循環往復,這個做法是相當的巧妙的,要自己多多的研究,果然這就是數學的魅力!!!

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script type="text/javascript">
function get(n){
var arr=[1]
var index2=0
var index3=0
var index5=0
for(var i=1;i<n;i++){
arr[i]=Math.min(arr[index2]*2,arr[index3]*3,arr[index5]*5)
if(arr[i]==arr[index2]*2){
index2++
}else if(arr[i]==arr[index3]*3){
index3++
}else if(arr[i]==arr[index5]*5){
index5++
}
}
return arr
}
console.log(get(3))
</script>
</body>
</html>

算法重要的是思想,厚積才能薄發,只有自己多多的去練習,去見一見這些巧妙的解法,日積月累,然后學這個思想,多總結,自然水到渠成

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM