js 的一些题


给出一个区间[a, b],计算区间内“神奇数”的个数。
神奇数的定义:存在不同位置的两个数位,组成一个两位数(且不含前导0),且这个两位数为质数。
比如:153,可以使用数字3和数字1组成13,13是质数,满足神奇数。同样153可以找到31和53也为质数,只要找到一个质数即满足神奇数。
输入描述:
输入为两个整数a和b,代表[a, b]区间 (1 ≤ a ≤ b ≤ 10000)。

输出描述:
输出为一个整数,表示区间内满足条件的整数个数

输入例子:
11 20

输出例子:
6

在网上看到的一些题,查找神奇数字,觉得蛮有趣,跟小时候做题一样,其实比较简单,但是还是把他记录下来吧。没有怎么优化过,也没有对边值和奇怪值进行处理,后续再说吧


/**
     * 检测是否为质数
     * @param  {[type]} num [description]
     * @return {[type]}     [description]
     */
     function isPrime(num){
         num=parseInt(num);
        //如果能整除2或者5且相加能被3整除都不用循环
        if(num%2===0||num%3===0){
            return false;
        }
        if(num%5===0&&num>=10){
            return false;
        }

        for(var i=3;i<num/2;i++){
            if(num%i===0){
                return false;
            }
        }
        return true;
    }
    /**
     * 排列组合的可能
     * @param  {[type]} num [description]
     * @return {[type]}     [description] 
     * 比如 153 可以组合成15 13 和 51 53 以及 31 35
     */
    function lineNum(num){
        var stringNum=String(num);
        var numArr=stringNum.split('');
        var numLen=numArr.length;
        var times=numLen*(numLen-1)
        var allNum=[];
        for(var i=0;i<numLen;i++){
            for(var j=0;j<numLen;j++){
                if(j!=i&&numArr[i]!=0){
                    allNum.push(numArr[i]+numArr[j])
                }
            }
        }
        return allNum;

    }
    /**
     * 查找神奇数
     * @param  {[type]} a [description]
     * @param  {[type]} b [description]
     * @return {[type]}   [description]
     */
     function findMagicNum(a,b){
         var allMagics=[];
         var times=0;
         for(var i=a;i<=b;i++){
             if(isPrime(i)&&allMagics.indexOf(i)<0){
                 allMagics.push(i);
                 times++;
             }
             else if(!isPrime(i)){
                 var numLine=lineNum(i)
                 for(var j=0;j<numLine.length;j++){
                     if(isPrime(numLine[j])&&allMagics.indexOf(i)<0){
                         allMagics.push(i);
                         times++;
                     }
                 }
             }

         }
         return {
             allMagics:allMagics,
             num:times
         }
     }
     var obj=findMagicNum(11, 20);
     console.log(obj)

第二道


牛牛想对一个数做若干次变换,直到这个数只剩下一位数字。
变换的规则是:将这个数变成 所有位数上的数字的乘积。比如285经过一次变换后转化成285=80.
问题是,要做多少次变换,使得这个数变成个位数。
输入描述:
输入一个整数。小于等于2,000,000,000。

输出描述:
输出一个整数,表示变换次数。

输入例子:
285

输出例子:
2


     var time=1;
     function changeTime(num){
         if(num<10){
             time=0;
         }else{
             var stringNum=String(num);
             var numArr=stringNum.split('');
             var sum=1;
             for(var i=0;i<numArr.length;i++){
                 sum*=numArr[i];
             }
             if(sum>10){
                 time++;
                 changeTime(sum)
             }
         }

         return time;
     }
     console.log(changeTime(2869))

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>