美文网首页
js_部分面试题(五)

js_部分面试题(五)

作者: mao77_ | 来源:发表于2019-02-08 22:57 被阅读2次

    js_部分面试题(四)

    1. 判断价格;

        <body>
            <select id="month">
                <!--option[value=$]{$月份}*12-->
                <option value="1">1月份</option>
                <option value="2">2月份</option>
                <option value="3">3月份</option>
                <option value="4">4月份</option>
                <option value="5">5月份</option>
                <option value="6">6月份</option>
                <option value="7">7月份</option>
                <option value="8">8月份</option>
                <option value="9">9月份</option>
                <option value="10">10月份</option>
                <option value="11">11月份</option>
                <option value="12">12月份</option>
            </select>
            <select id="cw">
                <option value="jingji">经济舱</option>
                <option value="toudeng">头等舱</option>
            </select>
            <button id="btn">计算票价</button>
            <p id="price"></p>
            
            
        <script>
            // 1. 先判断月份
            // 2. 在判断舱位
            // -------------
            // 先把JS的代码中用到的元素找出来
            var selMonth = document.getElementById("month");
            var selCW = document.getElementById("cw");
            var btn = document.getElementById("btn");
            var P = document.getElementById("price");
            var initPrice = 4000;  //存储原始价格
            var price;  //计算出来的最终的价格
        
            // 点击计算票价的按钮之后去计算,事件
            btn.onclick = function () {
                //写如何计算的代码
                var month = +selMonth.value; //获取用户选择的月份
                var cw = selCW.value; //获取用户选择的舱位
                var discount;  //表示折扣
        
                if(month >= 4 && month <= 10){
                    if(cw == "toudeng"){
                        // price = initPrice * 0.9;
                        discount = 0.9;
        
                    }else {
                        // price = initPrice * 0.75;
                        discount = 0.75;
                    }
                }else{
                    if(cw == "toudeng"){
                        // price = initPrice * 0.6;
                        discount = 0.6;
                    }else {
                        // price = initPrice * 0.3;
                        discount = 0.3;
                    }
                }
                price = initPrice * discount;
                // console.log(price);
                P.innerHTML = "你选择的舱位是:"+ cw + ",选择的月份是:"+ month + ",最终的价格是:" + price;
            }
        </script>
    

    2. 写素数

        var min = 2;
        var max = 1000;
        var sum = 0;
        var index = 0;  // 用来计数
        for(var num = min; num <= max; num++){
            // 2 3 4 5 ... 10000
            // 计算 num是不是质数
            var flag = true; // true表示是质数
            
            for(var i = 2, v = Math.sqrt(num); i <= v; i++){
                if(num % i == 0){
                    flag = false;
                    break;  // 结束离他最近的那个
                }
            }
            if(flag){
                document.write(num + " ");
                index++;
                sum += num;
                if(index % 6 == 0){
                    document.write("<br>");
                }
                /*if(index == 5){
                    document.write("<br>");
                    index = 0;
                }*/
            }
        }
        document.write("<br>" + sum)
        
        </script>
        </body>
        </html>
        <!--
        在页面中输出 2 - 10000之间所有的素数,
        并在最后计算出来这些素数的和.
        
        -->
    

    3. 在页面上输出100到1000之间既是3的倍数又是5的倍数的数字。

        var m = 8909;
        var n = 18020;
        // 计算最大公约数
        var min = m < n ? m : n;
        for (var i = min; i > 0; i--){
            if (m % i == 0 && n % i == 0){
                console.log(m + "和" + n + "的最大公约数是:" + i);
                break;
            }
        }
        
        // 计算最小公倍数
        var max = m > n ? m : n;
        for (var i = max; ; i++){
            if (i % m == 0 && i % n == 0){
                console.log(m + "和" + n + "的最小公倍数是:" + i);
                break;
            }
        }
    

    4. 计算两个数的最大公约数和最小公倍数

        // 4. 求1!+2!+3!+...+10!的和。
        var num = 10;
        var sum = 0;
        var sumJc = 1;
    
        for(var j=1; j<=num; j++){
            sumJc *= j;
            // console.log(sumJc);
            sum += sumJc;
        }
        document.write("和为:" + sum);
        
        //---------------------------
        
        var num = 10;  // 1!+...10!
        var sum = 0;
        for (var i = 1; i <= num; i++){
            // 循环内部计算i的阶乘
            var ji = 1;
            for (var j = i; j >= 1; j--){
                ji *= j;
            }
            sum += ji;
        }
        console.log(sum);
    

    5. 对一个整数分解质因数。例如: 90 = 2 * 3 * 3 * 5

        //5. 对一个整数分解质因数。例如: 900 = 2 * 2 *
        var num = 90098090;
        var temp = num;
        var msg = num + " = ";
        for (var i = 2; i <= temp; i++){
            if (temp % i == 0){
                if (i == temp){ // 最后一次的时候不要再添加 * 号
                    msg += i;
                }else{
                    msg += i + " * ";
                }
                temp = temp / i;
                i--;
            }
        }
        console.log(msg);
        
        //------------------------------------
        
        var num = prompt("请输入一个整数:");
    
        if(num>1){
            document.write(num+"=");
            for(var i=2; i<=num; i++){
                if(i == num){
                    document.write(num);
                    break;
                }else if(num % i == 0){
                    num /= i;
                    document.write(i + " * " );
                    i--;
                }
            }
        }
    

    6. 在页面中显示出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。

        for(var num = 100; num < 1000; num++){
            var ge = num  % 10;
            var shi = parseInt(num / 10) % 10;
            var bai = parseInt(num / 100);
            if(ge ** 3 + shi ** 3 + bai ** 3 === num){
                console.log(num);
            }
        }
    

    7. 一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。 例如6=1+2+3.编程找出1000以内的所有完数。

        var max = 100000;
        for(var i = 2; i < max; i++){
            // 计算i的因子, 得到这些因字的和
            var sum = 0;
            for(var j = 1; j < i; j++){
                if(i % j == 0){
                    sum += j;
                }
            }
            if(sum == i){
                console.log("完数:" + i);
            }
            
        }
    

    8. 小游戏——猜数字

        while (true){
            var num = parseInt(Math.random()*101);
            while (true){
                var guess = prompt("请输入你猜的数字:范围在0-100");
                if(guess == num){
                    alert("恭喜你,猜对啦");
                    break;
                }else if(guess > num){
                    alert("你猜大啦");
                }else {
                    alert("你猜小了啦");
                }
            }
            var again = confirm("是否再来一局呢");
            if(!again){
                alert("欢迎下次再来");
                break;
            }else {
                alert("游戏即将开局,请做好准备");
            }
        }
    

    9. 猴子分桃

        var peach = 6;  // 桃子初始量
        var monkeyCount = 5;  //五只猴
        var success = false;
    
        for(; ; peach += 5){
            var temp = peach;
            for(var monkey=1; monkey<=monkeyCount; monkey++){
                if(temp % 5 == 1){
                    if(monkey == monkeyCount){
                        success = true;
                        break;
                    }
                    temp = ((temp - 1)/5 * 4);
                }else {
                    break;
                }
            }
            if(success){
                console.log(peach);
                break;
            }
        }
    

    10. 定义函数,输入年份,判断年份是否是闰年

        function isLeap(year){
            return year % 4 ==0 && year % 100 != 0 || year % 400 == 0;
            /*if( year % 4 ==0 && year % 100 != 0 || year % 400 == 0){
                return true;
            }else{
                return false;
            }*/
        }
    

    11. 定义函数,打印1999--2050年中间所有的闰年。(借用第一题的封装好的函数)

        function printAllLeap(from, to){
            for(var year = from; year <= to; year++){
                if(isLeap(year)){
                    document.write(year + " ");
                }
            }
        }
    

    12. 定义函数,输入一个日期,判断该日期是否合法;例如:输入 2015-2-29不合法。

        function isLegal(year, month, day){
            // 把一些明显不合法的先拦截掉
            if(month > 12 || month < 1 || day > 31 || day < 1) return false;
            // day [1,31]
            if(month == 4 || month == 6 || month == 9 || month == 11){
                return day <= 30;
            }else if(month == 2){
                if(isLeap(year)){
                    return day <= 29;
                }else{
                    return day <= 28;
                }
            }
            return true;
        }
    

    13. 棋盘上的麦

        function chess(i) {
            if(i == 1 ) return 1;
            return Math.pow(2, i-1) + chess(i-1);
        }
        console.log(chess(64));
    
    
        // 求每格应该放多少
        function countPer(n){
            if(n == 1) return 1;
            return 2 * countPer(n-1);
        }
        //求所有格的和
        function sum(n){
            if(n == 1) return 1;
            return countPer(n) + sum(n-1);
        }
    

    14. 定义函数: 计算斐波那契数列第n项

        function rabbitCount(j) {
            if(j==1 || j==2) return 1;
            return rabbitCount(j-1) + rabbitCount(j-2);
        }
    
        console.log(rabbitCount(30));
        
        //-------------------------------
        
        // function list(j) {
        //     var n1 = 1;
        //     var n2 = 1;
        //     for(var i=3; i<=j; i++){
        //         var temp = n2;
        //         n2 = n1 + n2;
        //         n1 = temp;
        //     }
        //     return n2;
        // }
        
        //--------------------
        
        function rabbitCount(n){
            if(n == 1 || n == 2) return 1;
            var a = 1;
            var b = 1;
            var count;
            for(var i=3; i<=n; i++){
                count = a + b;
                a = b;
                b = count;
            }
            return count;
        }
    

    15. 定义函数, 根据传入的年月日,返回这个年月日是那一年的第几天

        function isLeap(year) {
            return year%4==0 && year%100!=0 || year%400==0;
        }
    
        function fate(year, month){
            if(month==4 || month==6 || month==9 || month==11){
                return 30;
            }else if(month == 2){
                if(isLeap(year)){
                    return 29;
                }       
                return 28;
            }
            return 31;
        }
    
        function howDays(year, month, day){
            for(var i=month-1; i>0; i--){
                day += fate(year, i);
            }
            return day;
        }
    
        console.log(howDays(2018, 3, 31));
    
        //-----------------------------------------------------      
        
        function isLeap(year){
            return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
        }
        function isLegal(year, month, day){
            // 把一些明显不合法的先拦截掉
            if (month > 12 || month < 1 || day > 31 || day < 1) return false;
            // day [1,31]
            if (month == 4 || month == 6 || month == 9 || month == 11){
                return day <= 30;
            }else if (month == 2){
                if (isLeap(year)){
                    return day <= 29;
                }else{
                    return day <= 28;
                }
            }
            return true;
        }
        
        function dayPerYear(year, month, day){ // 2018, 3, 30
            if(!isLegal(year, month, day)) return -1;
            if(month == 1) return day;
            return day + sumDays(year, month - 1) // 2018, 2
        }
        // 求前 month个月的总天数
        function sumDays(year, month){  // 2018, 5
            if(month == 1) return 31;
            return sumDays(year, month - 1) + days(year, month);
        }
        // 求第month个月的天数
        function days(year, month){
            if(month == 9 || month == 4 || month == 6 || month == 11){
                return 30;
            }else if(month == 2){
                if(isLeap(year)){
                    return 29;
                }
                return 28;
            }
            return 31;
        }
    

    16. 读取学生的10门课的成绩, 然后输出10门课成绩的最高分, 最低分, 总分, 平均分.提示:把10门课的成绩保存如一个数组中.

        // var arr = [];
        // var sum = 0;
        // while(true){
        //     var temp = +prompt("请输入成绩(0-100)");
        //     if(temp>=0 && temp<=100){
        //         arr[arr.length] = temp;
        //         if(arr.length === 10){
        //             break;
        //         }
        //     }else {
        //         alert("输入错误,请重新输入");
        //     }
        // }
        //
        // var maxScore = arr[0];
        // var minScore = arr[0];
        // for(var j=0; j<arr.length; j++){
        //     sum += arr[j];
        //     if(arr[j] > maxScore){
        //         maxScore = arr[j];
        //     }
        //     if(arr[j] < minScore){
        //         minScore = arr[i];
        //     }
        // }
        // console.log("总分为:" + sum);
        // var avg = sum/arr.length;
        // console.log("平均分为:" + avg);
        // console.log("最高分为:" + maxScore);
        // console.log("最低分为:" + minScore);
    
        //-------------------------------------------------------------------------
    
        function Student(){
            this.scores = [];
            this.init = function(){
                for(var i=0; i<3; i++){
                    var score = +prompt("请输入");
                    this.scores.push(score);
                }
            };
            this.max = function(){
                var scores = this.scores;
                var m = scores[0];
                for(var i=1; i<scores.length; i++){
                    if(m < scores[i]){
                        m = scores[i];
                    }
                }
                return m;
            };
            this.sum = function(){
                var s = 0;
                for(var e of this.scores){
                    s += e;
                }
                return s;
            };
            this.avg = function(){
                return this.sum()/this.scores.length;
            }
        }
        var si = new Student();
        si.init();
    

    17. 创建100个随机的10到60的随机整数, 然后分别统计每个数字出现的次数

        // var max = 60;
        // var min = 10;
        // var arr = [];
        // for(var i=0; i<100; i++){
        //     var num = parseInt(Math.random() * (max-min+1) + min);
        //     arr[i] = num;
        // }
        // var obj = {};
        // for(var j=0; j<arr.length; j++){
        //     if(obj[arr[j]]){
        //         obj[arr[j]] += 1;
        //     }else {
        //         obj[arr[j]] = 1;
        //     }
        // }
        // console.table(obj);
        // for(var e in obj){
        //     console.log(e, obj[e]);
        //     document.write(e + "出现了" + obj[e] + "次" + "<br>");
        // }
    
        //-------------------------------------------------------------------
    
        //区间[m, n]
        //获得随机区间数
        function randomInt(m, n){
            return parseInt(Math.random() * (n-m+1) + m);
        }
        //创建一个长度是count,元素的值的范围是[m, n]的数组
        function createArray(count, m, n){
            var arr = [];
            for(var i=0; i<count; i++){
                arr.push(randomInt(m,n));
            }
            return arr;
        }
        function statistics(){
            var obj = {};
            var arr = createArray(400, 10, 60);
            for(var num = 10; num<=19; num++){
                var c = 0;
                for(var e of arr){
                    if(e == num){
                        c++;
                    }
                }
                // console.log(num + "的个数是" + c);
                obj[num + ""] = c;
            }
            return obj;
        }
        var result = statistics();
        console.log(result["10"]);
        console.log(result);
    

    18. 定义一个函数, 判断数组中是否所有的数字都大于0提示: 传入一个数组, 返回布尔值

        var arr = [10, 20, -1, 30, 50];
        function isAllGTZero(arr){
            for(var i=0; i<arr.length; i++){
                if(arr[i] <= 0){
                    return false;
                }
            }
            return true;
        }
    

    19. 封装函数: 把两个数组共同的元素放入一个新的数组, 并返回新的数组,提示: 传入两个数组, 返回值为新的数组

        // var arr = [1,2,3,4,5,6];
        // var arr1 = [2,3,4,5,6,7,8,9];
        // console.log(newAry(arr, arr1));
        //
        // function newAry(array1, array2){
        //     var newArr = [];
        //     for(var i=0; i<array1.length; i++){
        //         for(var j=0; j<array2.length; j++){
        //             if(array1[i] === array2[j]){
        //                 newArr[newArr.length] = array1[i];
        //             }
        //         }
        //     }
        //     return newArr;
        //
        // }
    
        //-----------------------------------------------------------------------
    
        function commonEle(arr1, arr2){
            var arr = [];
            for(var i=0; i<arr1.length; i++){
                var num = arr1[i];
                for(var e of arr2){
                    if(num == e){
                        arr.push(num);
                    }
                }
            }
            return arr;
        }
        var a = commonEle([1, 2, 3, 3], [10, 2, 3]);
        console.log(a);
    

    20. 定义一个函数: 可以把数组中的下标为 3 的元素移到数组的开头.提示: 传入一个数组

        // var arr = [11,22,33,44,55,66,77,88,99];
        // console.log(drift(arr));
        //
        // function drift(array) {
        //     array.unshift(+(array.splice(3, 1)));
        //     return arr;
        // }
    
        //----------------------------
    
        //把数组中的下标为i的元素移动到下标为j的位置。
        function changeIndex(arr, i, j){
            var a = arr.splice(i, 1);
            arr.splice(j, 0, a[0]);
            return arr;
        }
    
        console.log(changeIndex([10, 20, 30, 40], 3, 1));
    

    21. 有一个从大到小排好序的数组{99,85,82,63,60}。现从页面输入一个数,要求按原来的规律将它插入数组中。假设你输入的80,则应该插入到82和63之间。

        function insert(arr, num){
            for(var i=0; i<arr.length; i++){
                if(arr[i] < num){
                    arr.splice(i, 0, num);
                    return;
                }
            }
            arr.push(num);
        }
        var arr = [99, 85, 82, 63, 60];
        insert(arr, 80);
        console.log(arr);
    

    22. 一个数字中有20个元素,对前10个元素使用升序,后10个元素使用降序。元素都是整数。

        // var arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20];
        // console.log(sequence(arr));
        //
        // function sequence(array){
        //     var newArr = array.splice(10);
        //     array.sort(function (a, b) { return a-b });
        //     newArr.sort(function (a, b) { return b-a });
        //     return array.concat(newArr);
        // }
    
        //------------------------------------------------------------------------------------------------
    
        var arr = [1,2,3,4,5,6,7,8,9,10];
        function mySort(arr){
            var a1 = arr.slice(0, 5);
            var a2 = arr.slice(5);
            a1.sort(function(a,b){return a-b});
            a2.sort(function(a,b){return b-a});
            arr.splice(0, arr.length);
            // arr.push(...a1.concat(a2));//...展开运算符
            Array.prototype.push.apply(arr, a1.concat(a2))  //ES6借调
        }
    
        console.log(arr);
    

    23. 传入任意字符串,统计字符串中的大写字母个数、小写字母个数、数字个数、其他字符个数。

        function counts(s){
            // 大写字母的个数, 小写字母的的个数, 数字的个数, 其他字符的个数
            // var cs = [0, 0, 0, 0];
            var cs = {
                upperCase: 0,
                lowerCase: 0,
                number: 0,
                other: 0
            }
            for (var c of s){
                if (c >= "A" && c <= "Z"){
                    // cs[0]++;
                    cs.upperCase++;
                }else if (c >= "a" && c <= "z"){
                    // cs[1]++;
                    cs.lowerCase++;
                }else if (c >= "0" && c <= "9"){
                    // cs[2]++;
                    cs.number++;
                }else{
                    // cs[3]++;
                    cs.other++;
                }
            }
            return cs;
        }
        
        console.log(counts("fAKJHKHKHKIfjlasdjfoeur93932980?..,,uui]]][[\\"));
    

    24. 去除字符串首尾空格.(写一个自定义的 trim 函数, 不能使用s.trim())

        function myTrim(s){
            var start, end;
            for (var i = 0; i < s.length; i++){
                if (s[i] != " " && s[i] != "\n" && s[i] != "\t"){
                    start = i;
                    break;
                }
            }
            for (var i = s.length - 1; i >= 0; i--){
                if (s[i] != " " && s[i] != "\n" && s[i] != "\t"){
                    end = i + 1;
                    break;
                }
            }
            // return s.substring(start, end);
            return s.slice(start, end);
        }
        
        console.log("zzz" + myTrim("   \n \t ldfjlsdjfabc  sdlfjdls\n   \t   ") + "zzz");
    

    25. 验证字符串:长度4-16; 只能包含数字、英文字符、下划线三种符号; 首字符不能是数字";

        function validate(s){
            // 先把一些不满足的给排除掉, 可以最大限度的降低嵌套
            // 如果长度小于4或者小于16 直接认为验证没有通过
            if (s.length < 4 || s.length > 16) return false;
            if (s[0] >= "0" && s[0] <= "9") return false;
        
            for (var c of s){
                if (!((c >= "0" && c <= "9")
                        || (c.toLowerCase() >= "a" && c.toLowerCase() <= "z")
                        || (c == "_"))){
                    return false;
                }
            }
            return true;
        }
        
        console.log(validate("abc1你好"));
    

    26. 创建一个长度为5-10, 内容为数字字母下滑线的随机字符串.

        console.log(create());
    
        function create(){
            var arr = [];
            for(var i=0; i<10; i++){
                arr.push(i + "");
            }
            for(var i=97, z="z".charCodeAt(0); i<=z; i++){ 
                arr.push(String.fromCharCode(i));
                arr.push(String.fromCharCode(i-32));
            }
            arr.push("_");
            var s = "";
            for(var i=0; i<randomInt(5, 10); i++){
                s += arr[randomInt(0, arr.length-1)];
            }
            return s;
        }
    
        function randomInt(m, n){
            return parseInt(Math.random() * (n-m+1) + m);
        }
    

    27. 将字符中单词用空格隔开,已知传入的字符串中只有字母,每个单词的首字母大写,请将每个单词用空格隔开,只保留第一个单词的首字母大写

         传入:"HelloMyWorld"  // Hello m
         返回:"Hello my world"
        function foo(s){
           /* for (var i = 1; i < s.length; i++){
                if (s[i] >= "A" && s[i] <= "Z"){
                    s = s.replace(s[i], " " + s[i].toLowerCase());
                }
            }
            return s;*/
            
            var temp = "";
            var start = 0;  // 每次截取的开始的位置
            for (var i = 1; i < s.length; i++){
                if (s[i] >= "A" && s[i] <= "Z"){  // M
                    temp += s.slice(start, i) + " " + s[i].toLowerCase();
                    start = i + 1;
                }
            }
            temp += s.slice(start);
            return temp;
        }
        console.log(foo("HelloHyHorld"));
    

    相关文章

      网友评论

          本文标题:js_部分面试题(五)

          本文链接:https://www.haomeiwen.com/subject/hzzosqtx.html