day 03 循环的使用

循环语句

循环的概念
重复的执行一段的代码,避免死循环,提高效率(时间复杂度(关注) 空间复杂度(不关注)),循环包含三大语句。while语句,do while 语句 for语句

个人见解:循环的作用就是可以不用个人重复写一些相同的代码,或者有规律的代码能节约时间与节约空间,简单来说能节约钱。

 

循环的三要素
1.初始值(初始的变量值)

2.迭代量 (基于初始值的改变)

3.条件 (基于初始值的判断)

while语句 (与for语句相比,比for语句效率更高)

while(条件表达式(返回true和false)){
执行的代码
}
var 初始值变量 =while(条件){
迭代量
执行的代码
}

do while (对应的while唯一的区别是先做 后判断 意味最少走一次)

do{
执行的代码
}while(条件)
var 初始值 =do{
执行的代码
迭代量变化
}while(条件)

while和do while区别

1.do while 一定会执行一次,而while语句可以一次都不执行。

2.do while是先执行后判断,while是相反的,是先判断后执行所以可以一次都不执行。

for循环(常用的)

for(初始值;条件;迭代量){
//执行的代码 跟if一样如果你执行的代码只有情况下可以省略{}
}

面试题 :for(;;) 错了吗(没错的 也意味对应的里面的内容可以被省略,只是死循环)

时间复杂度(判断内容执行效率 依照次数计算)

概述:从传统意义上 对应的代码时间复杂度越低对应的执行速度越快(效率越高)

O(1) (每行只执行一遍 常数阶)(最快的没有之一,现行实际项目中难以达到,因为很占空间,但是执行速度是最快的)

var i = 0
i++
if(i<10){
console.log(i)
}

O(logN) (俩个值来决定 对数阶)(实际项目中达到这种效果已经是大牛了,快)

var i = 1 //由i和2决定
while(i<100){
i*=2
}

O(n) (由对应的一个值决定的 线性阶) (前面三个的执行速率都快)

 

for(var i=0;i<100;i++){
console.log('我执行了'+i+'遍')
}

 

O(nlogn) (循环嵌套对应的对数阶循环 线性对数阶){把for循环放在while里面也时间复杂度不变}

for(var i=0;i<100;i++){
var j = 1 //由i和2决定
while(j<100){
j*=2
}
}

 

O(n^2) (双层循环嵌套 平方阶){一把只嵌套两个循环,以为嵌套多了会时间复杂度会进行指数增长,不划算}

for(var i=0;i<100;i++){
for(var j=0;j<100;j++){
console.log('我执行了'+j+'遍')
}
}

时间复杂度 O(1) < O(logN) <O(n)<O(nlogn)<O(n^2)
while的时间复杂度低于for循环 (算法的优化可以使用while来替代for)、

 

break
break 跳出代码块 (switch 以及 循环中) 只会跳出当前break所在层的循环(这个循环会被结束)

continue
continue 跳过本次循环(只能在循环内使用)循环还在继续

练习题

 

 

 

 

 

 

 //第一题
    var sum = 0;
    var temp = 2000
    for (var n1 = 1; n1 <= 20; n1++) {
        temp += temp * 0.05
    }
    sum = temp
    console.log(sum.toFixed(2));
    //第二题
    var sum1 = 0
    for (var n2 = 1; n2 <= (50 - 15) / 5; n2++) {
        sum1++
    }
    console.log('需要' + sum1 + "次才可以把水缸挑满");
    //第三题
    for (var n3 = 100; n3 <= 200; n3++) {
        if (n3 % 3 == 0 || n3 % 7 == 0) {
            console.log(n3);
        }
    }
    //第四题
    function text(p) {
        var sum2 = 1
        for (var n4 = 1; n4 <= p; n4++) {
            sum2 *= n4
        }
        console.log(sum2);
    }
    text(10)
    //第五题
    var sum5 = 0
    for (var n5 = 1; n5 < 100; n5++) {
        if (n5 % 2 != 0) {
            sum5 += n5
        }
    }
    console.log(sum);

    //第六题

    for (var n7 = 1; n7 < 10; n7++) {
        for (var n6 = 1; n6 < n7 + 1; n6++) {
            document.write(n6 + "*" + n7 + '=' + n7 * n6);
        }
        document.write('<br/>')
    }
    //第七题
    var sum7 = 0
    for (var n8 = 20; n8 <= 80; n8++) {
        if (n8 % 3 == 0) {
            document.write(' ' + n8)
            sum7++
            if (sum7 % 5 == 0) {
                document.write('<br/>')
            }
        }
    }
    //第八题
    var sum8 = 0
    for (var n9 = 1000; n9 <= 2000; n9++) {
        if (n9 % 4 == 0 && n9 % 100 != 0 || n9 % 400 == 0) {
            document.write(' ' + n9)
            sum8++
            if (sum8 % 4 == 0) {
                document.write('<br/>')
            }
        }
    }
    //第九题
    var sum9 = 0
    for (var i = 1; i <= 100; i++) {
        if (i % 2 != 0) {
            sum9 += 1 / i
        } else {
            sum9 -= 1 / i
        }
    }
    document.write(' ' + sum9);
    //第十题
   //第九题
    function multiple(a, b) {
        if (a > b) {
            for (var i = b; i <= a * b; i++) {
                if (i % b == 0 && i % a == 0) {
                    document.write(a + '与' + b + '的最小公倍数是' + i);
                    break
                }
            }
        } else if (a < b) {
            for (var i = a; i <= a * b; i++) {
                if (i % b == 0 && i % a == 0) {
                    document.write(a + '与' + b + '的最小公倍数是' + i);
                    break
                }
            }
        } else {
            document.write(a + '与' + b + '的最小公倍数是' + i);
        }
    }
    multiple(45, 30)
    //第十题
    function text(n, a) {
        var sum = a.toString();

        for (var i1 = 1; i1 <= n; i1++) {
            if (i1 != n) {
                document.write(' ' + sum.toString() + '+');
                sum += a
            } else if (i1 == n) {
                document.write(sum);
            }
        }
        // document.write('<br/>')
    }
    text(4, 3)
    //第11题
    for (var i2 = 10000; i2 <= 99999; i2++) {
        if (parseInt((i2 / 10000) % 10) == parseInt(i2 % 10) && parseInt(i2 / 1000 % 10) == parseInt(i2 / 10) % 10) {
            document.write(' ' + i2 + ' ')
        }

    }
 //第12题
    var temp = 1
    var sum = 0
    for (var i = 1; i <= 63; i++) {
        temp *= 2
        sum += temp
    }
    document.write(sum + 1 + '不能给这太多了,你国家给了你都给不起')
 //第13题

    function text(n) {
        var sum = 1
        var sum1 = 0
        while (n != 0) {
            for (var i = 1; i <= n; i++) {
                sum *= i
            }
            sum1 += sum
            sum = 1
            n--
        }
        document.write(sum1)
    }
    text(5)
    //第14题水仙花数
    for (var i = 100; i <= 999; i++) {
        if (parseInt(i % 10) * parseInt(i % 10) * parseInt(i % 10) + parseInt((i / 10) % 10) * parseInt((i / 10) % 10) *
            parseInt((i / 10) % 10) + parseInt((i / 100) % 10) * parseInt((i / 100) % 10) * parseInt((i / 100) % 10) ==
            i) {
            document.write(i + '是水仙花数')
        }
    }
    //第15题
    var l = prompt("请随便输入一个两位的数字")
    if (!(l * 1) && l != 0) {
        console.log('别乱输入快给我重新写');
    } else if (parseInt(l % 10) > parseInt(l / 10 % 10)) {
        console.log(parseInt(l / 10 % 10) + '' + parseInt(l % 10));
    } else if (parseInt(l % 10) < parseInt(l / 10 % 10)) {
        console.log(parseInt(l % 10) + '' + parseInt(l / 10 % 10));
    }
    //第16题
    function text2(a, b) {
        var temp = 0
        if (a > b) {
            for (var i = 1; i <= b; i++) {
                if (a % i == 0 && b % i == 0) {
                    temp = i
                }
            }
            console.log(temp);
        } else if (a < b) {
            for (var i = 1; i <= a; i++) {
                if (a % i == 0 && b % i == 0) {
                    temp = i
                }
            }
            console.log(temp);
        }else{
            console.log('error');
        }
    }
    text2(12,8)

 

posted @ 2022-07-27 19:20  Aimer的小迷弟  阅读(86)  评论(0)    收藏  举报