zoukankan      html  css  js  c++  java
  • js的一些较为常见的语句算法题

    下面各题解法可能存在一些时间和空间复杂度问题,有些没有做到最优化,还请谅解!!!

    1、用for循环实现10的阶乘。

        //使用for循环方法解答
        var num = 10
        var sum = 1;
        var str = '';
        for(var i=10;i>=1;i--){
            sum *= i;
            if(i == 1){
                str += i;
            }else{
                str += i+'*';
            }
        }
        console.log(num+'! = '+str+' = '+sum);


    2、打印九九乘法表

        for(var i=1;i<=9;i++){
            var str = '';
            for(var j=1;j<=i;j++){
                str += i+'*'+j+'='+i*j+'	';
            }
            console.log(str);
        }


    3、有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?【该处时间复杂度相对较大,代码仅供参考】

        var n =10;
        var str = '';
        for(var i=1;i<=n;i++){    
            for(var j=1;j<=n;j++){
                if(j != i){
                    for(var k=1;k<=n;k++){
                        if(k != i && k != j){
                            str = str+i+j+k+'	';
                        }
                    }
                }
            }
        }
        console.log(str);


    4、判断101-200之间有多少个素数,并输出所有素数(只能被1和它本身整除的自然数为素数)
    // console.log(Math.sqrt(101));  //101开平方

        var str = '';
        var count = 0;
        for(var i=101;i<=200;i++){
            var flag = true;
            for(var j=2;j<=Math.sqrt(i);j++){
                if(i%j == 0){
                    //不是质数
                    var flag = false;
                    break;  //节省运算时间,后面循环不需要再执行了
                }
                
            }
            if(flag){
                str += i+'	';
                count++;
            }
        }
        console.log('101~200之间有'+count+'个素数
    分别为:
    '+str);


    5、打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方
    // console.log(Math.pow(10,3));   //计算10的三次方

        for(var i=100;i<1000;i++){
            var hundred = parseInt(i/100);
            var ten = parseInt((i-hundred*100)/10);
            var unit = i-hundred*100-ten*10;
            // console.log('................');
            var sum = Math.pow(hundred,3)+Math.pow(ten,3)+Math.pow(unit,3);
            if(sum == i){
                console.log(i);
            }
        }


    6、将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

        var num = 90;
        var str = '';
        for(var i=2;i<=num;i++){
            // console.log(i);
            if(num == i){
                str += i;
            }
            while(num != i){
                if(isPrime(i)){
                    // console.log(i);
                    if (num%i == 0) {
                        num /= i;
                        str += i+'*';
                    }else{
                        break;
                    }
                }else{
                    break;
                }
            }    
        }
        console.log(str);
    
        //判断一个数是否为素数
        // console.log(isPrime(4)); 测试isPrime()函数
        function isPrime(n){
            var flag = true;
            for(var i=2;i<=Math.sqrt(n);i++){
                if(n%i == 0){
                    flag = false;
                }
            }
            return flag;
        }


    7、求任意两个正整数的最大公约数和(GCD)和最小公倍数(LCM)

      
        /*
          辗转相除法的算法为:首先将 m除以 n(m>n)得余数 r,再用余数  r 去除原来的除数,
          得新的余数,重复此过程直到余数为 0时停止,此时的除数就是m 和 n的最大公约数。
          求 m和 n的最小公倍数: m和 n的积除以(m和 n 的最大公约数)。
        */
        function gcdLcm(m,n){
            var mn = m*n;
            var r = m%n;
            while(r != 0){
                r = m%n;
                m = n;
                n = r;
            }
            console.log('最大公约数为:'+m+'	最小公倍数为:'+mn/m);
        }
        gcdLcm(100,40)

    8、求1000以内的完全数(若一个自然数,恰好与除去它本身以外的一切因数的和相等,这种数叫做完全数。)

        // var sum = 0;
        for(var i=1;i<=1000;i++){
            var sum = 0;
            for(var j=1;j<=i;j++){
                if(i%j == 0 && i!=j){
                    sum += j;
                    // console.log(sum);
                }
            }
            if(sum == i){
                console.log(i);
            }
        }
  • 相关阅读:
    会议总结
    排球比赛积分规则
    我的计算机历程和认识
    排球积分程序
    《如何成为一个高手》观后感
    十八周总结
    十六周总结(流程)
    排球计分程序
    十四周学习总结
    十三周学习总结
  • 原文地址:https://www.cnblogs.com/nzcblogs/p/11166266.html
Copyright © 2011-2022 走看看