JavaScript基础算法练习

这篇博客包含了多个JavaScript编程练习,涉及九九乘法表的输出、判断闰年和平年、数组操作如求和、翻转、排序、去重等,还包括自定义函数实现数学计算、字符串连接和数组合并。此外,还涵盖了经典数学问题如兔子繁殖和猴子吃桃等。这些练习展示了JavaScript在处理循环、条件判断及数组操作等方面的基础应用。
摘要由CSDN通过智能技术生成

作业练习

one

// 1.九九乘法表

     for (var i = 1; i < 10; i++) {
            document.write("<span>");
            for (var j = 1; j <= i; j++) {
                if (j % 2 == 0) {
                    document.write("<button style='width:60px;background-color: #f2f2f2; '>" + j + "×" + i + "=" + i * j + " " + "</button>");
                } else {
                    document.write("<button style='width:60px;background-color: aqua; '>" + j + "×" + i + "=" + i * j + " " + "</button>");
                }
            }
            document.write("</span>");
            document.write("<br>");
        }

// 2.使用if判断实现:用户输入年份,判断显示该年是平年还是闰年

var year = Number(prompt("请输入年份"));
        if (year > 0&& Number(num) == parseInt(Number(num))) {
            if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
                alert("闰年");
            } else {
                alert("平年");
            }
        } else {
            alert("输入错误");
        }

// 3.使用for循环实现:请用户输入学生的人数,然后依次输入每一位同学的成绩。 输入完毕之后,将总成绩和平均成绩在控制台输出

var num = prompt("请输入学生人数");
        var sum = 0;
        if (Number(num) > 0&& Number(num) == parseInt(Number(num))) {
            for (var i = 1; i <= num; i++) {
                var score = Number(prompt("请输入分数"));
                var sum = sum + score;
            }
            document.write("总成绩:" + sum + "平均成绩:" + sum / num);
        } else {
            alert("error");
        }

// 4.使用while循环实现用户随机输入一个正整数,显示这个正整数各个位数之和

 var num = prompt("请输入正整数:");
        var i = 0;
        var sum = 0;
        if (Number(num) > 0 && Number(num) == parseInt(Number(num))) {
            while (i <= num.length - 1) {
                sum += Number(num[i]);
                i++;
            }
            document.write(sum);
        } else {
            alert("error");
        }

var num = Number(prompt("请输入正整数:"));
        var sum = 0;
        if (num > 0 && num == parseInt(num)) {
            while (num != 0) {
                sum += num % 10;
                num = parseInt(num / 10);
            }
            alert("各位数之和:" + sum);
        } else {
            alert("error");
        }

// 5.使用do…while循环实现输出询问:“今天你有认真学习吗?输入yes或no”,如果输入"yes",则弹出"你真是个好孩子!~",如果输入"no",则继续询问

 var str = prompt("今天你有认真学习吗?输入yes或no");
        if (str !== "yes" && str !== "no") {
            alert("error");
        } else {
            do {
                str = prompt("今天你有认真学习吗?输入yes或no");
                if (str === "yes") {
                    alert("你真是个好孩子!~");
                    break;
                }
            } while (str === "no");
        }

        do {
            var str = prompt("今天你有认真学习吗?输入yes或no");
            if (str === "yes") {
                alert("你真是个好孩子!~");
                break;
            }
        } while (1);

// 求数组最大值

var arr = [22, 5, 7, 18, 66];
        var max = arr[0];
        for (var i = 0; i < arr.length; i++) {
            var max = arr[i] >= max ? arr[i] : max;
        }
        console.log(max);

// 翻转数组

var arr = [22, 5, 7, 'x', 66,33];
        for (var i = 0; i < arr.length / 2; i++) {
            [arr[i], arr[arr.length - i - 1]] = [arr[arr.length - i - 1], arr[i]];
        }
        console.log(arr);

// 循环输入存入数组

 var arr = [];
        var s = prompt("请输入");
        while (s !== "" && s !== null) {
            arr.push(s);
            s = prompt("请输入");
        }
        console.log(arr);

// 冒泡排序

 var arr = [22, 5, 7, 18, 66];
        for (var i = 0; i < arr.length; i++) {
            for (var j = 0; j < arr.length - i - 1; j++) {
                if (arr[j] > arr[j + 1]) {
                    [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
                }
            }
        }
        console.log(arr);

// 比较排序

var arr = [22, 5, 7, 18, 66];
        for (var i = 0; i < arr.length; i++) {
            for (var j = i + 1; j < arr.length - 1; j++) {
                if (arr[i] > arr[j]) {
                    [arr[i], arr[j]] = [arr[j], arr[i]];
                }
            }
        }
        console.log(arr);

// 数组去重

var arr = ['a', 'b', 'c', 'a', 'b', 'a'];
        var newArr = [];
        for (var i = 0; i < arr.length; i++) {
            if (newArr.indexOf(arr[i]) === -1) {
                newArr.push(arr[i]);
            }
        }
        console.log(newArr);

// 统计个数

var arr = ['a', 'b', 'c', 'a', 'b', 'a'];
        var newArr = {};
        for (var i = 0; i < arr.length; i++) {
            newArr[arr[i]] = (newArr[arr[i]] + 1) || 1;
        }
        console.log(newArr);

// 去除指定值

var arr = [22, 5, 7, 18, 66];
        var carr = [5, 4];
        for (var i = 0; i < arr.length; i++) {
            for (var j = 0; j < carr.length; j++) {
                if (arr[i] == carr[j]) {
                    arr.splice(i, 1);
                    i--;
                }
            }
        }
        console.log(arr);

// 找出两数组不同元素

var arr1 = [0, 1, 1, 2, 3];
        var arr2 = [0, 4, 0];
        var newArr = arr1.filter(x => arr2.indexOf(x) == -1).concat(arr2.filter(x => arr1.indexOf(x) == -1));
        console.log(newArr);


//此方法只能在两个数组内都没有重复元素时使用
var arr1 = [0, 1, 2, 3, 4, 5];
        var arr2 = [0, 4, 6, 1, 3, 9];
        var newArr = arr1.concat(arr2).filter(function (v, i, arr) {
            return arr.indexOf(v) === arr.lastIndexOf(v);
        });
        console.log(newArr);

// 多个数组找最大值拼成新数组

      var arr1 = [0, 1, 2, 3, 4, 5];
        var arr2 = [0, 4, 6, 1, 3, 9];
        var array = [arr1, arr2];
        var newArr = [];
        for (var i in array) {
            newArr.push(array[i].sort(function (a, b) {
                return b - a;
            })[0]);
        }
        console.log(newArr);
two

1.自定义一个函数,用来实现两个数字的计算,并返回结果

function add(num1, operator, num2) {
            return eval(num1 + operator + num2);
        }
        console.log(add(1, '*', 2));


        function computed(num1, operator, num2) {
            if (typeof num1 !== 'number' || typeof num2 != 'number') {
                return "输入为非数字";
            } else {
                if (operator == '+') {
                    return num1 + num2;
                } else if (operator == '-') {
                    return num1 - num2;
                } else if (operator == '*') {
                    returnud num1 * num2;
                } else if (operator == '/') {
                    return num1 / num2;
                } else if (operator == '%') {
                    return num1 % num2;
                } else {
                    return "输入符号错误";
                }
            }
        }
        console.log(computed(3, '+', 4));

2.自定义函数,实现数组中join()效果

function myJoin(arr, sign) {
            var str = String(arr[0]);
            for (var i = 1; i < arr.length; i++) {
                str += sign + arr[i];
            }
            return str;
        }
        console.log(myJoin([2, 3, 4], ','));

3.自定义函数,实现数组中concat()效果I

function myConcat(arr1, arr2) {
            console.log(typeof arr1);
            if (typeof arr1 != typeof arr2) {
                return "参数类型不一致";
            } else if (Array.isArray(arr1)) {
                for (var i = 0; i < arr2.length; i++) {
                    arr1.push(arr2[i]);
                }
                return arr1;
            } else if (typeof arr1 == 'string') {
                return arr1 + "" + arr2;
            } else {
                return "输入不符合要求";
            }
        }
        console.log(myConcat('sdff2234', 'sdfgsd'));

其他练习

// 2.古典问题: 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问36个月后的兔子总数为多少 ?
        // var t = 3;//时间
        // var n = 1;//兔子个数
        // while (t <= 36) {
        //     n *= 2;//兔子每次生小兔子数量翻倍
        //     t += 3;//每过三个月
        // }
        // document.write(n);

        // 3.猴子吃桃问题: 猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
        // var n = 1;//第十天的桃子数
        // for (var i = 10; i > 1; i--) {
        //     n = 2 * (n + 1);//从第十天往前推,推到第一天
        // }
        // document.write(n);

        // 6..求1 + 2! + 3! +...+20!
        // 第六题
        // var sum = 0;
        // for (var i = 1; i <= 20; i++) {
        //     sum += i * i;//累计求和
        // }
        // document.write(sum);

        // 7.有一农夫有100文钱,去买鸡,假设公鸡5文一只,母鸡3文一只,小鸡1文一只,问农夫怎么买鸡刚好花完100文;
        // 第七题(无脑循环)
        // for (var i = 0; i <= 20; i++) {
        //     //循环公鸡,从没有开始数
        //     for (var j = 0; j <= 33; j++) {
        //         //循环母鸡,从没有开始数
        //         for (var k = 0; k <= 100; k++) {
        //             //循环小鸡,从没有开始数
        //             if (5 * i + 3 * j + k == 100) {
        //                 // 满足条件就输出
        //                 document.write("公鸡" + i + "只" + "母鸡" + j + "只" + "小鸡" + k + "只" + "<br>");
        //             }
        //         }
        //     }
        // }

        // 8.韩信点兵,三人一组余两人,五人一组余三人,七人一组余4人,问至少有多少个士兵
        // for (var i = 5; i < 100; i++) {
        //     // 从5开始数数,满足条件就输出
        //     if (i % 3 == 2 && i % 5 == 3 && i % 7 == 4) {
        //         document.write(i);
        //         break;
        //     }
        // }

        // 9.今有大和尚,一天吃五个馒头,中和尚一天吃3个馒头,3个小和尚吃一个馒头,问一百个和尚一百个馒头,大和尚,中和尚,小和尚各多少个 ?
        // 第九题(无脑循环)
        // for (var i = 0; i <= 20; i++) {
        //     for (var j = 0; j <= 33; j++) {
        //         if ((100 - 5 * i - 3 * j) % 3 !== 0) {
        //             // 剩下的小和尚不是三的整数,馒头就吃不完,不符合,退出
        //             continue;
        //         }
        //         for (var k = 0; k <= 300; k++) {
        //             // 和尚刚好100个并且馒头刚好100个,则输出
        //             if (5 * i + 3 * j + k / 3 == 100 && i + j + k == 100) {
        //                 document.write("大和尚" + i + "个" + "中和尚" + j + "个" + "小和尚" + k + "个" + "<br>")
        //             }
        //         }
        //     }
        // }

        // 10.找出所有的水仙花数(水仙花数153 = 1 ^ 3 + 5 ^ 3 + 3~3 水仙花数是三位数)
        // 第十题
        // for (var i = 2; i <= 999; i++) {
        //     var b = parseInt(i / 100);//取出百位数字
        //     var s = parseInt(i / 10) % 10;//取出十位数字
        //     var g = i % 10;//取出个位数字
        //     // 判断
        //     if (i == b * b * b + s * s * s + g * g * g) {
        //         document.write(i + " ");
        //         continue;
        //     }
        // }

        // 11.2.从100米的高处往下抛一个球,这个球每次落地之后反弹为原高度的一半,10次之后这个球—共跑了多远,第10次反弹后的高度是多少
        // 第十一题
        // var h = 100;//每次弹的高度
        // var s = 0;//一共跑的路程
        // for (var i = 1; i <= 10; i++) {
        //     h = h / 2;//小数不准,会有精度问题,这里没有考虑
        //     s += h * 3;
        // }
        // document.write("路程" + s + "高度" + h);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值