目前为止学习过的循环解析过程

本章目录

----------① 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);

 

 

输出结果

 

posted @ 2018-01-19 12:55  刘半封  Views(325)  Comments(0Edit  收藏  举报