• 关于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>

    算法重要的是思想,厚积才能薄发,只有自己多多的去练习,去见一见这些巧妙的解法,日积月累,然后学这个思想,多总结,自然水到渠成

     

  • 相关阅读:
    如何用css画一个文件上传图案?
    Vue.js命名风格指南
    JS的静态类型检测,有内味儿了
    每天认识几个HTTP 响应码
    剑指offer二叉树算法题JavaScript整理
    javascript
    JS数据结构与算法
    (转自MDN)CSS基础一定要看的包含块(containing block)
    简单记记display中inline、block、inline-block以及常见行内/块内元素
    从计算机操作系统中了解并发与并行、进程与线程
  • 原文地址:https://www.cnblogs.com/yiyistar/p/7502554.html
Copyright © 2020-2023  润新知