JavaScript-循环+函数编程题

1.输入两个数,找出他们的最大公约数和最小公倍数

(循环)方法一:

        var num1 = Number(prompt("请输入第一个数:"));
        var num2 = Number(prompt("请输入第二个数:"));
        var max = num1 > num2 ? num1 : num2
        var min = num1 < num2 ? num1 : num2
        while (1) {
            var t = min;
            min = max % min;
            max = t;
            if (min == 0) {
                break;
            }
        }
        console.log(num1 + "和" + num2 + "的最大公约数是:" + max)
        min = (num1 * num2) / max; // 最小公倍数
        console.log(num1 + "和" + num2 + "的最小公倍数是:" + min);

(循环)方法二:

        var a = Number(prompt("请输入第一个数"));
        var b = Number(prompt("请输入第二个数"));
        // 最小公倍数
        for (var i = a; i <= a * b; i++) {
            if (i % a == 0 && i % b == 0) {
                console.log(i);
                break;
            }
        }

        // 最大公约数
        for (var j = a; j >= 1; j--) {
            if (a % j == 0 && b % j == 0) {
                console.log(j);
                break;
            }
        }

(函数递归) 方法三:

        // 最大公约数
        function gcd(m, n) {
            var min = m < n ? m : n
            var max = m > n ? m : n
            var t = min
            min = max % min
            max = t
            if (min != 0) {
                return gcd(min, max)
            } else {
                return max
            }
        }

        // 最小公倍数
        function lcm(m, n) {
            return m * n / gcd(m, n)
        }
        var m = +prompt("请输入第一个数");
        var n = +prompt("请输入第二个数");
        console.log("最大公约数是:" + gcd(m, n));
        console.log("最小公倍数是:" + lcm(m, n));

2.有数字0,1,2,3,4五个字,可以组成多少个无重复的四位数(第一个数不是0)

穷举法:

        var sum = 0;
        for (var i = 1; i < 5; i++) {
            // 取千位数
            for (var j = 0; j < 5; j++) {
                // 百位数
                for (var k = 0; k < 5; k++) {
                    // 取十位数
                    for (var l = 0; l < 5; l++) {
                        // 取个位数
                        if (i != j && i != k && i != l && j != k && j != l && k != l) {
                            sum += 1;
                        }
                    }
                }
            }
        }
        console.log(sum);

3.找出0-100之间的质数

方法一:

        for (var i = 2; i <= 100; i++) {
            var f = 1
            for (var j = 2; j < i; j++) {
                if (i % j == 0) {
                    f = 0
                }
            }
            if (f) {
                console.log(i);
            }
        }

方法二:


        for (var i = 2; i < 100; i++) {
            for (var j = 2; j < i; j++) {
                if (i % j == 0) {
                    break;
                }
            }
            //    代表内循环结束
            if (i == j) {
                console.log(i);
            }
        }

4.把一个球从100米高空扔下,每次落地会反弹原高度的一半,问10次之后这个球一共运动了多少米

方法一(以一下一上为一个轮回100+50 + 50+25 +25+12.5...):

        var h = 100
        var sum = 0
        for (var i = 1; i <= 10; i++) {
            sum += h
            h = h / 2
            sum += h
        }
        console.log("10次之后这个球一共运动了" + sum + "米");

方法二(以一上一下为一个轮回,注意第一次的上没有100 +50+50 +25+25):

        var sum = 100;
        var height = 100;
        for (var i = 0; i < 9; i++) {
            sum += height;
            height /= 2;
        }
        console.log(sum);

5.找出100~1000所有的水仙花数  (153=1*1*1+5*5*5+3*3*3)

方法一(穷举法):

       for (var i = 1; i < 10; i++) {
            for (var j = 0; j < 10; j++) {
                for (var k = 0; k < 10; k++) {
                    if (i * i * i + j * j * j + k * k * k == i + "" + j + "" + k) {
                        console.log(i + "" + j + "" + k);
                    }
                }
            }
        }

方法二(去除每一位上的数):

        var a, b, c;
        for (var i = 100; i < 1000; i++) {
            a = parseInt(i / 100);
            b = parseInt((i / 10) % 10);
            c = parseInt(i % 10);
            if (i == a * a * a + b * b * b + c * c * c) {
                console.log(i);
            }
        }

6.百马百担问题,有100匹马,驮100担货,大马驮3担,中马驮2担,2匹小马驮1担,求大、中、小各多少匹?

方法一:

for (var i = 0; i < 100; i++) {
            for (var j = 0; j < 100; j++) {
                for (var k = 0; k < 100; k++) {
                    if ((i + j + k == 100) && (i * 3 + j * 2 + k / 2 == 100)) {
                        console.log(i, j, k);
                    }
                }
            }
        }

方法二:

for(x=0;x<=33;x++){
    for(y=0;y<=50;y++){
        for(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值