JavaScript循环的应用——逻辑案例(求水仙花数/素数/百鸡问题/百钱问题/斐波拉契数列/求和/阶乘/阶乘和)

JavaScript循环的应用——逻辑案例

拓展应用:案例的输出用到了模板字符串(即反引号包着${变量}),它基本等同于双引号与加号拼接的效果。

1.求水仙花数

2.求素数(质数)

3.百鸡问题

4.百钱问题

5.斐波拉契数列

6.求和

7.求阶乘

8.求阶乘和


1.水仙花数:个位的立方+十位的立方+百位的立方=它本身
案例一: 输入一个三位数num,判断是否是水仙花数水仙花数
    var num=prompt("请输入一个三位数:");
    var bai=parseInt(num/100);
    var shi=parseInt((num/10)%10);
    var ge=parseInt(num%10);
    if(ge*ge*ge+shi*shi*shi+bai*bai*bai==num){
        console.log(`${num}是水仙花数`);
    }else{
        console.log(`${num}不是水仙花数`);
    }

运行结果:
输入56
在这里插入图片描述
输入407
在这里插入图片描述

2.求素数(质数):除了1和本身不能被其他数整除
案例二:打印1~100之间的素数
//打印1~100之间的素数
    //素数:除了1和它本身,没有其他了
    for(var i=2;i<=100;i++){
    	//定义一个变量,假设它为质数
        var flag=true;
        for(var j=2;j<i;j++){
            if(i%j==0){
                flag=false;
                break;
            }
        }
        if(flag==true){
        console.log(`质数:${i}`);
        }
    }

运行结果:
在这里插入图片描述

3.百鸡问题
案例三:100元买100只鸡,输出他的组合情况
//100元买100只鸡
//小鸡 1元/3只;公鸡 3元/只;母鸡 5元/只
//定义小鸡为i,公鸡为j,母鸡为k;
for(var j=0;j<=33;j++){
        for(var k=0;k<=20;k++){
            var i=100-j-k;
            if(j*3+k*5+i*1/3==100){
                console.log(`公鸡:${j}母鸡:${k}小鸡:${i}`);
            }
        }
    }

运行结果:
在这里插入图片描述

4.百钱问题
案例四:把100元全部换成100张,输出他的组合情况
//实现百钱问题
    //人民币有1毛,1元 10元 50元,打印所有组合
    //100张人民币 总和正好是 100元,打印所有组合
    //声明一毛为i;一元为j;十元为k;五十元为l;
    for(var i=0;i<=1000;i++){
        for(var j=0;j<=100;j++){
            for(var k=0;k<=10;k++){
                var l=100-i-j-k;
                if(i*0.1+j*1+k*10+l*50==100){
                    console.log(`毛:${i}张;元:${j}张;十元:${k}张;五十:${l}张`);
                }
            }
        }
    }

运行结果:
在这里插入图片描述

5.斐波拉契数列
案例五:斐波拉契数列

1.打印斐波拉契数列的前n项

//键盘输入n,打印斐波拉契数列的前n项
    //斐波拉契数列:1 1 2 3 5 8 13 21 34 55...
    //前两项是1,后面的每一项都是前两项的和
    var n = prompt("请输入n:");
    //为什么定义两个变量?因为求前两个未知数之和,所以需要定义两个变量用来接收数据
    //当前项
    var current = 0;
    //前一项
    var before = 0;
    for (var i = 1; i <= n; i++) {
        //第一项无规律可循,先判断
        if (i == 1) {
            current = 1;
            console.log(current);
            continue;
        }
        //第一项无规律可循,先判断
        if (i == 2) {
            before = current;
            current = 1;
            console.log(current);
            continue;
        }
        //下一项等于当前项加上一项之和
        var after = current + before;
        //把当前项赋值给前一项
        before = current;
        //把下一项赋值给当前项
        current = after;
        console.log(current);
    }

运行结果:
输入5,打印前5项
在这里插入图片描述
2.打印斐波拉契数列的第n项

//键盘输入n,打印斐波拉契数列的第n项
    //斐波拉契数列:1 1 2 3 5 8 13 21 34 55...
    //前两项是1,后面的每一项都是前两项的和
    var n = prompt("请输入n:");
    //为什么定义两个变量?因为求前两个未知数之和,所以需要定义两个变量用来接收数据
    //当前项
    var current = 0;
    //前一项
    var before = 0;
    //用来计数
    var flag = 0;
    for (var i = 1; i <= n; i++) {
        flag++;
        //第一项无规律可循,先判断
        if (i == 1) {
            current = 1;
            continue;
        }
        //第一项无规律可循,先判断
        if (i == 2) {
            before = current;
            current = 1;
            continue;
        }
        //下一项等于当前项加上一项之和
        var after = current + before;
        //把当前项赋值给前一项
        before = current;
        //把下一项赋值给当前项
        current = after;
    }
    console.log(`第${flag}项的值为${current}`);

运行结果:
输入5,打印第5项
在这里插入图片描述

6.求和
案例六:求和
//计算并打印1~100之间能被3整除的奇数和
    var sum=0;
    for(var i=1;i<=100;i++){
        if(i%3==0 && i%2!=0){
                sum=sum+i;
        }
    }
    console.log(sum);

运行结果:
结果为867
在这里插入图片描述

7.求阶乘
案例七:求m的阶乘
//键盘输入m,打印m!
    var m=prompt("请输入你要求的阶乘");
    var fac=1;
    for(var i=1;i<=m;i++){
        fac = fac*i;
    }
    console.log(fac);

运行结果:
输入8,结果为40320
在这里插入图片描述

8.求阶乘和
案例八:求1~m的阶乘和
//1!+2!+...+m!
    var m=+prompt("请输入m:");
    var sum=0;
    for(var i=1;i<=m;i++){
        //求ii
        var fac=1;
        for(var j=1;j<=i;j++){
            fac=fac*j;
        }
        sum=sum+fac;
    }
    console.log(sum);

运行结果:
输入2,结果为3
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值