JavaScript基础-testDemo

前言

这篇随笔记录的是一些之前JavaScript基础学习时的逻辑题demo.

//        1 写出判断一个年份是否闰年的表达式:

//        润年的判定(符合下面两个条件之一):
//        年份能够被400整除.(比如:2000)
//        年份能够被4整除但不能被100整除.(比如:2008)
//
            var year = 2008;
            year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)
//
//        2 让用户输入一个年份,如果是润年,则输出true,如果不是,则输出false
            var year = prompt("请输入一个年份");
            if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)){
                console.log(true);
            }else {
                console.log(false);
            }
   
//        3 比较3个数字的大小 ,输出最大者(不考虑相等)
//            思路:先比较其中两个,再用其中教大者和第三个数比较
            var a = 6,b= 7,c=8;
            if (a > b) {
                if ( a > c) {
                    console.log(a);
                }else {
                    console.log(c);
                }
            }else {
                if ( b > c) {
                    console.log(b);
                }else {
                    console.log(c);
                }
            }
//
//        4 提示用户输入密码,如果密码是“88888”则提示正确,否则要求再输入一次,如果密码是“88888”则提示正确,否则提示错误,程序结束。
//            思路:1 让用户输入密码
                var pwd = prompt("请输入密码");
//                    2 判断密码是否等于"888888"
                if (pwd == "888888"){
//                    3 密码正确,提示正确
                    alert("密码正确");
                }else {
//                    4 密码错误,要求重新输入
                    pwd = prompt("密码错误,请重新输入密码");
//                    5   在判断一次
                    if (pwd == "888888"){
//                        6   提示正确
                        alert("密码正确");
                    }else {
                        alert("密码错误");
                    }
                }

//        5 提示用户输入用户名,然后再提示输入密码,如果用户名是“admin”并且密码是“88888”,则提示正确,否则,如果用户名不是admin就提示用户用户名不存在,如果用户名是admin则提示密码错误.
//            思路:1  接收用户输入的用户名和密码
            var account = prompt("输入用户名");
            var pwd = prompt("输入密码");
//            2   判断用户名和密码是否正确
            if (account == "admin" && pwd == "888888"){
                alert("登录成功");
            }else {
                //如果用户名不是admin就提示用户用户名不存在
                if (account != "admin"){
                    alert("用户不存在");
                }else {
//                    如果用户名是admin则提示密码错误
                    alert("密码错误");
                }
            }
//        6 提示用户输入年龄,如果大于等于18,则告知用户可以查看,如果小于10岁,则告知不允许查看,如果大于等于10岁并且小于18,则让用户确认是否查看
//            思路:1 接收用户输入
            var age = parseInt(prompt("年龄"));4
//            2   判断处在哪个阶段
            if (age > 18) {
                alert("可以查看");
            }else if (age > 10) {
                confirm("你确定要看?");
            }else {
                alert("不允许查看");
            }
//
//        循环结构
//
//        1 要求用户输入用户名和密码 用户名只要不是admin 密码不是888888就提示用户一直重新输入
            var account = prompt("请输入用户名");
            var pwd = prompt("请输入密码");
            while (account != "admin" || pwd != "888888"){
                alert("用户名或者密码错误,请重新输入");
                account = prompt("请输入用户名");
                pwd = prompt("请输入密码");
            }
            alert("正确");
//        2 输入一个数字,输出这个数字的位数
            var number = parseInt(prompt("请输入一个数字"));
            var count = 0;
            if (number == 0){
                count = 1;
                console.log("数字的位数是:"+count);
            }else {
                while (number != 0){
                    number = parseInt(number / 10);
                    count++;
                }
                console.log("数字的位数是:"+count);
            }

//        3 输入班级人数,然后依次输入学员成绩,计算班级学员的平均成绩和总成绩
            var sum = 0;
            var count = parseInt("输入人数");
            for (var i = 0; i < count; i++) {
                var score = parseFloat(prompt("请输入第个"+(i+1)+"同学的成绩"));
                sum += score;
            }
            var avg = sum / count;
            console.log("总分为"+sum);
            console.log("平均分"+avg);
//        4	打印1到100的和
            var sum = 0;
            for (var i = 1; i <= 100; i++) {
                sum += i;
            }
            console.log(sum);
//        5	求1-100之间所有数的和、平均值
//            和
            var sum = 0;
            for (var i = 1; i <= 100; i++) {
                sum+=i;
            }
//            平均值
            var avg = sum/100;
//        6	求1-100之间所有偶数的和
            var sum = 0;
            for (var i = 1; i <= 100; i++) {
                  if ( i % 2 == 0){
                      sum += i;
                  }
            }
//        7	求1-100之间所有所有奇数的和
//

//        8	找出100-999间的水仙花数
        for (var i = 100; i < 1000; i++) {
            var a = i % 10;
            var b = parseInt(i / 10 % 10);
            var c = parseInt(i / 100)
            if (i == a * a * a + b * b * b + c * c * c) {
                console.log(i)
            }
        }
//
//        9	本金10000元存入银行,年利率是千分之三,每过1年,将本金和利息相加作为新的本金。计算5年后,获得多少钱?
            var money = 10000;
            var rate = 0.003;
            for (var i = 0; i < 5; i++) {
                money *= rate;
            }
            console.log(money);
//
//        10	求斐波那契数列中第12个数字,1,1,2,3,5,8,13,21

            function getFBNQ(n){
                if(n<3){return 1};
                return getFBNQ(n-1)+getFBNQ(n-2);
            }
            console.log(getFBNQ(7))
//
//        11	在网页上打印三角形
                for (var i = 0; i < 9; i++) {
                    for (var j = 0; j <= i; j++) {
                        document.write("*");
                    }
                    document.write("<br>");
                }
//
//        12	输出九九乘法表
            for (var i = 1; i <= 9; i++) {
                for (var j = 1; j <= i; j++) {
                    document.write( j + " x " + i + " = " + i*j + "&nbsp;&nbsp;");
                }
                document.write("<br>");
            }
//
//        13	案例:求1—100之间所有不能被3整除的整数的和,输出第一个大于2000的和并结束程序
            var sum = 0;
            for (var i = 1; i <= 100; i++) {
                if ( i % 3 == 0){
                    continue;
                }
                sum += i;
                if (sum > 2000){
                    console.log(sum);
                    break;
                }
            }//
//        14 	循环录入5个人的年龄并计算平均年龄,如果录入的数据出现负数或大于100的数,立即停止输入并报错.
                var sum = 0;
//                标记一下,如果中途出现问题,不需要执行求平均值的操作
                var flag = true;
                for (var i = 0; i < 5; i++) {
                    var age = parseInt(prompt("请输入第"+(i+1)+"个人的年龄"));
                    if ( age < 0 || age > 100 ){
                        alert("你输入的年龄有问题");
                        //出现问题之后要把标记更改
                        flag = false;
                        break;
                    }
                    sum += age;
                }
                if (flag){
                    var avg = sum / 5;
                    console.log(avg);
                }


//
//        15	计算1-100之间不能被7整除的数的和
                var sum = 0;
                for (var i = 1; i < 100; i++) {
                    if( i % 7 == 0 ){
                        continue;
                    }
                    sum += i;
                }
//        16	输出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){
                    console.log(i);
                }
            }


循环

// 找出100-999间的水仙花数
// 水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。
   for ( var i = 100 ; i <= 999 ; i++ ) {
//        在循环内部做的事:
//            判断一个数字是否水仙花数
//                1 求出个位十位百位
       var unit = i % 10;
       var ten =  parseInt(i /10) % 10;
       var hun = parseInt(i /100);
//                2 三个位数的3次幂之和是否等于原来的数字
       if(Math.pow(unit,3)+Math.pow(ten,3)+Math.pow(hun,3) == i){
           console.log(i);
       }
   }

//求斐波那契数列中第12个数字,1,1,2,3,5,8,13,21

//代表的是要求的数字的前两个数字
   var n1 = 1;
   var n2 = 1;
   var n3;

   for (var i = 3; i <= 12; i++) {
       n3 = n2 + n1;
       n1 = n2;
       n2 = n3;
   }
   console.log(n3);


//输出九九乘法表
   for (var i = 1; i <= 9; i++) {
       for (var j = 1; j <= i; j++) {
           document.write(j + "x" + i + "=" + j*i + "&nbsp;&nbsp;")
       }
       document.write("<br>");
   }

//输出1-100内所有素数
//    素数:质数 ==》 除了1和自己本身之外不能被其他数字整除
for (var i = 2; i <= 100 ; i++) {
//    问:如何证明一个数字是素数?
//        从2开始到n-1这么多个数字都不能被整除

//    假设法:
//        先假设这个数字是质数
    var flag = true;
//            循环的从2开始用这个数字除以每次循环的次数,如果有其中一次能被整除,就证明假设不成立
    for (var j = 2; j <= i - 1; j++) {
        if(i % j === 0){
//            推翻假设
            flag = false;
            break;
        }
    }
//            如果一直循环结束之后,假设仍然成立,就证明是质数
    if(flag){
        console.log(i);
    }
}

``
- 数组
``js
//        求数组中元素的和,平均值,最大值,最小值
//        var arr = [5,89,64,75,23,15];
//        var sum = 0;
//        for (var i = 0; i < arr.length; i++) {
//            sum+=arr[i];
//        }
//        console.log(sum);
//        console.log(sum/arr.length);
//
////        最大值
////        1 先默认数组的第0个元素是最大值
//        var max = arr[0];
////        循环的和后面的每一个元素比较,取其大者和后面元素再比较
//        for(var i = 1;i<arr.length;i++){
//            if(max < arr[i]){
//                max = arr[i];
//            }
//        }
//        console.log(max);
//        根据输入班级人数依次输入每个人成绩,求总成绩和平均值
//        1 输入班级人数
//        var count =  parseInt(prompt("输入班级人数"));
//        从依次、和根据输入的人数可以知道用for循环
//            在循环里做什么事情?
//                输入每个人的成绩
//                    求和
//        用数组来保存每一个同学的成绩
//        var arr = [];
//        var index = 0;
//        for(var i = 0; i < count ;i++){
//            var score = parseFloat(prompt("请输入第"+(i+1)+"个同学的成绩"));
////            arr[index] = score;
////            index++;
//            arr[arr.length] = score;
//        }
//        console.log(arr);
//        将字符串数组用|或其他符号分割成字符串
//        ["a","b","c","d"]  ===>  "a|b|c|d"   "a,b,c,d"
//        var arr = ["a","b","c","d"];
//        var str = "";
//        for (var i = 0; i < arr.length; i++) {
//            if(i == arr.length - 1){
//                str += arr[i];
//            }else {
//                str += arr[i] + ",";
//            }
//        }
//        console.log(str);
//        去掉数组中重复元素并组成新数组
//        var arr = [1,2,3,1,2,3,4,5,6,6,7];
//
////        var newArr = [1,2,3,4,5,6,7]
//
////        1 先声明一个新的数组用来装不重复的数据
//        var newArr = [1,2];
////            思路:用旧的数组中的每一个数字跟新数组中的每一个数字比较,如过旧的数组中某一个元素跟新数组中每一个元素都不重复,就把这个元素往新数组中添加
////        外层循环取出旧的数组中的每一个元素
//        for (var i = 0; i < arr.length; i++) {
////            内层循环取出新数组中的每一个元素
////            假设旧的数组元素跟新数组元素中任意一个都不相等
//            var flag = false;
//            for (var j = 0; j < newArr.length; j++) {
////                如果任意一个新元素和旧元素相等,证明假设是错的
//                if ( arr[i] === newArr[j] ){
//                    flag = true;
//                    break;
//                }
//            }
//            if(!flag) {
////                当假设仍然成立,才会把旧数组加入到新数组中
//                newArr[newArr.length] = arr[i];
//            }
//        }
//        console.log(newArr);
//        将数组中大于20的数字放入到一个新的数组中

//        var arr = [2,7,8,15,89,44,56,3,9];
//        var newArr = [];
////        用数组中的每一个元素和20比较,如果大于20就添加到新的数组中
//        for (var i = 0; i < arr.length; i++) {
//            if(arr[i] > 20){
//                newArr[newArr.length] = arr[i];
//            }
//        }
//        console.log(newArr);

//        翻转数组
//        var arr = [1,2,3,4,5,6,7,8,9];
//
//        for(var i = 0; i< arr.length / 2;i++){
//            var temp = arr[i];
//            arr[i] = arr[arr.length - 1 -i];
//            arr[arr.length - 1 -i] = temp;
//        }
//        console.log(arr);

//        arr = [9,8,7,6,5,4,3,2,1]
//        如果不在原来的数组上修改
//        直接用一个新数组将原来的数组从后开始遍历,往新数组里面存储
//        var newArr = [];
//        for (var i = arr.length -1 ; i >= 0; i-- ) {
//            newArr[newArr.length] = arr[i];
//        }
//        console.log(newArr);

//        在原来的数组上修改的


//        交换两个变量的值
//        var a = 10;
//        var b = 20;
//        var temp = a;
//        a = b;
//        b = temp;

冒泡排序

//        冒泡排序,从小到大    [15,97,36,13,47,42,88]
        var arr = [15,97,36,13,47,42,88];
//        1 用外层循环控制比较的轮数
        for (var i = 0; i < arr.length - 1; i++) {
//            2 用内存循环控制比较的次数
            for (var j = 0; j < arr.length - i - 1; j++) {
//                如果前一个大于后一个,要调换位置
                if(arr[j] > arr[j+1]){
                    var temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }

函数

//        判断一个数是否是素数
       var number = 789;

       var flag = true;
       for (var i = 2; i < number; i++) {
           if(number % i === 0){
               flag = false;
               break;
           }
       }
       function isPrime(n) {
            var flag = true;
            for (var i = 2; i < n; i++) {
                if(n % i === 0){
                    flag = false;
                    break;
                }
            }
            return flag;
            if (flag){
                return true;
            }else {
                return false;
            }
        }

//        求斐波那契数列Fibonacci中的第n个数是多少?      1 1 2 3 5 8 13 21...
       function getFibonacci1(n) {
           if(n == 1 || n == 2){
               return 1;
           }
           var n1 = 1;
           var n2 = 1;
           var n3;
           for (var i = 3; i <= n; i++) {
               n3 = n1 + n2;
               n1 = n2;
               n2 = n3;
           }
           return n3;    
       }
//        递归
//            就是函数内部调用自己本身
//            所有使用递归的时候,一定要有退出递归的条件
        function getFibonacci2(n) {
            if (n == 1 || n == 2){
                return 1;
            }
           return getFibonacci(n -1) + getFibonacci( n -2 )
        }    

数组练习

        //        将一个字符串数组输出为|分割的形式,比如“刘备|张飞|关羽”。使用两种方式实现
        //        join
        //        var arr = ["a","b","c","d"];
        //        console.log(arr.join("|"));

        //        将一个字符串数组的元素的顺序进行反转。["a","b","c","d"] ["d","c","b","a"]。使用两种种方式实现。
        //        reverse
        //            作用是翻转数组,会改变原数组的顺序
        //        var arr = [0,1,2,3,4,5,6];
        //        console.log(arr.reverse());

        //        工资的数组[1500,1200,2000,2100,1800],把工资超过2000的删除
        //        splice
        //            用于删除、添加、替换数组的元素
        //            splice(从哪里开始删除,删除多少个)
        //        var arr =[1500,1200,2000,2100,2500,1800];
        //
        //        for (var i = 0; i <arr.length; i++) {
        //            if (arr[i] > 2000){
        //                arr.splice(i,1);
        ////                因为删掉一个之后,后面的元素会往前挪一位,所有要把索引也相应的向前挪一位
        //                i--;
        //            }
        //        }
        //        console.log(arr);

        //       ["c","a","z","a","x","a"]找到数组中每一个a出现的位置

        //        indexOf
        //            获取某个元素在数组中的索引,如果没找到,返回-1
//                    indexOf(要查找的元素,从哪个位置开始查找)
        var arr = ["c", "a", "z", "a", "x", "a"];
        var index = -1;
        for(var i = 0;i<arr.length;i++){
            index = arr.indexOf("a",++index);
//            当index==-1的时候,已经找到了数组的最末尾并且没有这个元素了,没有必要继续循环了
            if(index == -1){
                break;
            }
            console.log(index);
        }

Date对象

//        获取指定的日期和时间部分
        var date = new Date();
////        获取日期
       console.log(date.toDateString());
       console.log(date.toLocaleDateString());
////        获取时间
       console.log(date.toTimeString());
       console.log(date.toLocaleTimeString());
//        获取日期中的每一个部分
        var date = new Date();
        console.log(date.getTime());//得到的是1970年到这个日期的毫秒总数
        console.log(date.getMilliseconds());//得到当前时间的毫秒数 0-999
        console.log(date.getSeconds());
        console.log(date.getMinutes());
        console.log(date.getHours());
        console.log(date.getDay());
        console.log(date.getDate());
        console.log(date.getMonth());//月份也是从0开始的
        console.log(date.getFullYear());
posted @ 2017-03-27 14:58  蔡俊俊  阅读(1027)  评论(0编辑  收藏  举报