zoukankan      html  css  js  c++  java
  • 目前为止学习过的循环解析过程

    本章目录

    ----------① 10以内的奇数偶数

    ----------② 输出乘法口诀表

    ----------③ 找出100以内与7相关的数

    ----------④累加求和

    ----------⑤求10的阶乘

    ----------⑥兔子题

    ----------⑦折纸达到珠峰高度

    ----------⑧200元买三种东西花光所有钱

    ----------⑨100文买鸡

    ----------⑩凑钱1,2,5凑20元钱有多少可能

    ----------⑪填写加减使等式成立

    ----------⑫棋盘芝麻

    ----------⑬篮球弹跳

    ----------⑭阶乘相加

    ----------⑮阶乘相加

    ----------⑯找闰年

    一、找出十以内的奇数和偶数

    //10以内奇数偶数
        //10以内,代表循环条件,奇数偶数是判断条件,偶数是除以2余0的数,而奇数是自然数中除偶数之外的所有数,不能被2整除的数
        for( var i=0;i<=10;i++){
                //定义循环的条件,从0开始判断,范围包括10以内,每次执行+1;
                if(i%2==0){
                        //该判断的意义为,如果能够被2整除余数是0,则进入内部的数是偶数,然后输出
                        document.write("偶数是:"+i+"<br />")
                }
                else{
                        //那么除了偶数就是奇数
                        document.write("奇数是:"+i)
                }
        }
        //十以内与7相关的数

    输出结果:

    二、输出乘法口诀表


    所有的公式可以写为a*b=c的形式,那么口诀表的格式如下
    1*1=1;
    1*2=2;2*2=4;
    1*3=3;2*3=6;3*3=9;
    1*4=4;2*4=8;3*4=12;4*4=16;
    我们发现,每一列的a是相同的数值,且从第一列开始每次+1
    每一行的b是相同的数值,且从第二行开始每次+1;

        //可以先定义a的范围及a的运算形式,每次+1
        for(var a=1;a<10;a++){
            //然后定义b的范围,每次+1,并且使用b<=1,去重复的公式,避免出现1*1--1*9;2*1--2*9的重复
            for(var b=1;b<=a;b++){
                //定义ab的乘积
                var c = a*b;
                //输出因为a的每次+1换行,所以使b显示在前,a显示在后
                document.write(b+"*"+a+"="+c+";")
            }
            document.write("<br>");
        }

    结果:

    三、找出100以内与7相关的数

    我们可以考虑所有与7相关的数,有下面几种情况

    ①  判断能被七整除的,

    ② 尾数是7的数,    除以10余7的,

    ③ 十位数是7的数字,  (除以10的整数部分)除以10等于7的,

        //首先定义循环,遍历每一个小于等于100的数字
        for(var seven=0;seven<101;seven++){
                //判断能被七整除的,除以10余7的(尾数是7的数),(除以10的整数部分)除以10余7的,这是十位数是7的数字
                if(seven%7==0 || seven%10==7 || parseInt(seven/10)==7){
                    document.write(seven+"&nbsp");    
                }    
        }

    输出结果:

    四、累加求和,求0-100之间的和,

    0+1+2+3+4+5...+100,

    每次总数等于之前的和加当前的数,而当前的数是递加1

    var sum = 0;//定义变量盛放总数,0+任何数都等于原来的数
        //循环,从0开始加到100
        for(var i=0;i<101;i++){
            //因为i从0开始,i每次加1.所以总数=上一次的总数+i当前的数
            sum = sum+i;  //0  1 3    6
        }
        document.write(sum);

    输出结果:

    五、求10的阶乘

    数学表达方式1*2*3*4*5....*10

    //首先想到的是规定范围,从1开始(排除0,因为0乘以任何数为0),最高循环到10
        var factorial =1;//因为是乘法,所以默认值是1,1乘以任何数为原来的数
        for(var i=1;i<11;i++){
                //阶乘等于上一个得出来的积再乘以当前数
                factorial = factorial*i;
        }
        document.write(factorial);

    输出结果:

    六、兔子题

    题目:有一对幼兔,幼兔1个月后长成小兔,小兔1个月后长成成兔并生下一对幼兔,问8个月后有多少对兔子,幼兔、小兔、成兔对数分别是多少。

    题目解析

    月份  0   1   2   3   4   5   6   7   8
    幼兔  1   0   1   1   2   3   5   8   13
    小兔  0   1   0   1   1   2   3   5   8
    成兔  0   0   1   1   2   3   5   8   13
    从第一个月开始看,规律是
    小兔初始值为1;每个月的小兔等于上个月的幼兔
    成兔初始值为0,每个月的成兔等于上个月的成兔+上个月的小兔
    幼兔初始值为0,每个月的幼兔等于上个月的小兔+上个月的额成兔

    var yt =1;
        var xt =0;
        var ct =0;
        for(var month=1;month<9;month++){
                //成兔等于上个月的成兔+上个月的小兔
                ct = ct + xt;
                //小兔等于上个月的幼兔
                xt = yt; 
                //yt = xt + ct因为xt已经赋值,所以会出现yt等于之前的和,所以找到新规律,当前月的小兔等于当前月的成兔
                yt = ct; 
                
        }
        alert(ct+yt+xt)

    输出结果:

    七、折纸达到珠峰高度

    题目:折多少次和珠穆朗玛峰一样高,一张纸的厚度是0.0001米,将纸对折,对折多少次厚度超过珠峰高度8848米

     定义纸的厚度,每次运行对折一次,即为原来的二倍厚度,判断厚度大于8848的时候记录循环次数并跳出

    var h = 0.0001;
            //从第一次对折开始
            for(var i=1;i>=0;i++)
            {
                //每次对折当前高度等于上次高度*2倍
                h = h*2;  
                //判断如果h的厚度大于8848的时候,输出i的对折次数
                if(h>8848)
                {
                    alert(i);
                    break;    //该处执行一次并跳出,否则继续运行
                }    
            }

    输出结果:

     八、200元买三种东西花光所有钱

    题目:羽毛球拍15元,球3元,水2元。200元每种至少一个,有多少可能

    羽毛球拍x最多买13个 球y最多买66个 水z最多买100个   以及  15x+3y+2z=200

    var sum = 0;//容器存放次数
            //x的可能最少1次,所以循环范围最多的次数-1
            for(var x=1;x<15;x++){
                    //y的可能最少1次,所以循环范围最多的次数-1
                    for(var y=1;y<66;y++){
                            //z的可能最少1次,所以循环范围最多的次数-1
                            for(var z=1;z<100;z++){
                                    //判断三种物品的价格相加等于200的可能再次运行
                                    if(x*15+y*3+z*2==200){    
                                        sum++;//每次符合条件,计数器+1
                                    }    
                            }    
                    }    
            }
            alert(sum);

    输出结果:

    九、100文买鸡

    题目:公鸡2文,母鸡1文,小鸡半文,每种至少一只,100文买100只鸡有多少可能性

      公x最多可能50种可能 母y最多可能100种可能  小z最多200种可能   以及  2x+y+0.5z=100

    var sum = 0;//容器存放次数
            //x的可能最少1次,所以循环范围最多的次数-1
            for(var x=1;x<51;x++){
                    //y的可能最少1次,所以循环范围最多的次数-1
                    for(var y=1;y<101;y++){
                            //z的可能最少1次,所以循环范围最多的次数-1
                            for(var z=1;z<201;z++){
                                    //判断三种物品的价格相加等于200的可能再次运行
                                    if(2*x+y+0.5*z==100 && x+y+z==100){
                                        sum++;//每次符合条件,计数器+1
                                    }
                            }    
                    }    
            }
            alert(sum);

    输出结果:

    十、凑钱1,2,5凑20元钱有多少可能

    1块钱x最多可能20种可能, ,2元钱y最多可能10种可能  5块钱z最多4种可能   以及  x+2y+4z=100

    var sum = 0;//容器存放次数
            //因为没有规定最少存在1次所以初始值=0,所以循环范围最多的次数等于可能的最多次数
            for(var x=0;x<21;x++){
                    for(var y=0;y<11;y++){
                            for(var z=0;z<5;z++){
                                if(x+2*y+5*z==20){
                                    sum++;
                                }    
                            }    
                    }    
            }
            alert(sum);

    输出结果:

    十一、填写加减使等式成立

    题目:括号里面只能放加或减,如果要使等式成立,括号里面应该放什么运算符 12()34()56()78()9 = 59;

    加减号可以使用当前数字乘以1或乘以-1代替,并且区分每个加减号,规定ijkl为四个变量存储1或-1

    四个运算符,每个运算符有+或-两个选项12+i+34+j+56+k+78+l+9+"="+59

    //规定循环,数字初始值为-1,每次运行+2,得到1,最大值为1;
        for(var i=-1;i<2;i+=2){
                for(var j=-1;j<2;j+=2){
                        for(var k=-1;k<2;k+=2){
                                for(var l=-1;l<2;l+=2){
                                        //判断等式成立
                                        if(12+i*34+j*56+k*78+l*9==59){
                                                //为每个ijkl变量赋予+号或-号
                                                if(i==1){
                                                        i="+";
                                                }
                                                else{
                                                        i="-"
                                                }
                                                if(j==1){
                                                        j="+";
                                                }
                                                else{
                                                        j="-"
                                                }
                                                if(k==1){
                                                        k="+";
                                                }
                                                else{
                                                        k="-"
                                                }
                                                if(l==1){
                                                        l="+";
                                                }
                                                else{
                                                        l="-"
                                                }
                                                alert(12+i+34+j+56+k+78+l+9+"="+59);
                                        }
                                }
                        }
                }
        }

    输出结果:

    十二、棋盘芝麻

    题目:棋盘有32个格子,第一个格子放1个芝麻,第二个放2个,第三个放4个,第四个放8个。。。每个芝麻的重量为0.00001kg,如果要放满整个棋盘,需要多少重量的芝麻。

    芝麻数量   1     2     4     8     16     32

    相应格子   1     2     3     4       5      6

    相应算法    1*2^0        1*2^1  1*2^2    1*2^3     1*2^4    1*2^5

    //定义总数量
        var sum =0;
        for(var i=1;i<33;i++){
                //每次进入下一个格子的时候保证a初始值=1,因为,计算下面的循环,a初始值必须为1;
                var a =1; 
                var n =2;
                for(var j=1;j<i;j++){
                    /*进入该循环时,每次执行a = a*2,并且j始终小于i一个数,
                    所以
                    当i=1的时候是第一格,不执行,跳出,a=1;
                    当i=2的时候第二格,执行一次,a=2;跳出
                    当i=3的时候第三个,执行两次,a=4,跳出
                    */
                    a = a*n;
                }
                //总数量初始值为0,等于上次总数+当前格子数
                sum = sum + a;
        }
        alert(sum*0.00001)

    输出结果 :

    十三、篮球弹跳

    题目:篮球从10米高的地方落下,每次弹起的高度是原来的0.3倍,问弹跳10次之后篮球的高度。

    //初始高度
        var h =10;
        //循环条件弹跳次数,
        for(var i=1;i<11;i++){
                //循环内容高度改变,
                h = 0.3*h;    
        }
        alert("弹跳10次之后篮球的高度为:"+h);

    输出结果:

    十四、阶乘相加

    题目:计算 1!+2!+3!+…..+10!的结果。

     算法

    1           1
    1*2          1*2 =2
    1*2*3       2*3 =6
    1*2*3*4       6*4 =24
    1*2*3*4*5      24*5=120

     左侧是当前的阶乘,每次阶乘等于上次阶乘乘以当前数字

    右侧是代表当前的和等于之前的和加当前的阶乘

    var a = 1;
        var sum = 0;//定义存储和的容器
        //循环范围,十以内
        for(i=1;i<11;i++){
                //计算当前的阶乘,每次循环等于上次的阶乘乘以当前数字
                a = a*i;
                //计算和,每次和等于上次的和+当前的阶乘
                sum = sum + a;
        }
        alert(sum);

    输出结果:

    十五、找闰年

    题目:输出1000年到2018年的所有闰年

    凡是能被4整除的年份,但这里面有以及凡是能被400整除且不能被100整除的

    两种写法

    第一种

    var sum = 0;//定义计算闰年数的容器
        //循环遍历规定范围内的每一年
        for(var y=1000;y<=2018;y++){
                //遍历出每一种能被4除的年份
                if(y%4==0){
                        //凡是能被100整除的年份之中找到只能被400整除的
                        if(y%100==0){
                            if(y%400==0){
                                    document.write("<div>"+y+"</div>");
                                    sum++;
                            }
                        }
                        //除了上面的可能,凡是被4整除的年份列举
                        else{
                                document.write("<div>"+y+"</div>");
                                sum++;
                        }
                }
        }
        document.write("<div><br />闰年一共有:"+sum+"年</div>")

     第二种 

        var sl = 0;//定义计算闰年数的容器
             //循环遍历规定范围内的每一年
            for(var i=2010;i<2019;i++)
            {
                //判断能被400整除或者能被4整除并且不能被100整除的年份
                if(i%400==0 || i%4==0 && i%100!=0)
                {
                    document.write(i);
                    sl++;
                }
            }
            alert(sl);

    输出结果

  • 相关阅读:
    【转】Redis概念原理、redis面试
    mysql登录后显示用户名与当前数据库名
    (5.3.10)数据库迁移——sql server降级操作
    navicat下载安装破解
    sql server2016+windows server2016使用日志传送做主从,主库无法备份事务日志
    (4.41)sql server如何把xml转换成表格数据?
    .NET Core SDK在Windows系统安装后出现Failed to load the hostfxr.dll等问题的解决方法
    .NET Core实战项目之CMS 第七章 设计篇-用户权限极简设计全过程
    .NET Core实战项目之CMS 第六章 入门篇-Vue的快速入门及其使用
    [译]聊聊C#中的泛型的使用(新手勿入)
  • 原文地址:https://www.cnblogs.com/wannian/p/8315949.html
Copyright © 2011-2022 走看看