zoukankan      html  css  js  c++  java
  • JavaScript 练习题

    本文是锻炼编程逻辑思维的一些题的归纳,红色字体是个人认为初学比较难懂的题。

    1.日期计算器:用户输入年月日,计算并打印出来是今年的第几天,星期几

     1 function data(){
     2                 //首先输入年月日
     3                 //1900年 1月1日为周一
     4                 var year =Number(prompt("请输入今年是哪一年 :")) ;
     5                 var month =Number(prompt("请输入是哪个月:")) ;
     6                 var day = Number(prompt("请输入今天是几号:")) ;
     7                 var i = 1;
     8                 var sum =0;
     9                 while(i<month){
    10                     switch (i){
    11                         case 1:
    12                         case 3:
    13                         case 5:
    14                         case 7:
    15                         case 8:
    16                         case 10:
    17                         sum= sum +31;
    18                             break;
    19                             
    20                         case 2:
    21                         if(year%400==0 || (year%4==0 && year!=0)){
    22                             sum = sum+29;
    23                         }else{
    24                             sum = sum +28;
    25                         }
    26                             break;
    27                             
    28                         case 4:
    29                         case 6:
    30                         case 9:
    31                         case 11:
    32                         sum = sum+30;
    33                             break;
    34                     }
    35                     i++;
    36                 }
    37                 sum = sum + day;
    38                 document.write("今天是这一年的第"+sum +"天");
    39             
    40                 //计算今天周几已知1900的一月一日是周一,计算出1900到现在一共有几天
    41                 for(var y=1900;y<=year;y++){ //year是自己输入要查询的年份,在年份到1900之间所有的
    42                     //y表示从1900年开始的每一年
    43                     if(year%400==0 || (year%4==0 && year!=0)){
    44                         sum += 366; //如果是闰年就加366天
    45                     }else{
    46                         sum += 365;
    47                     }
    48                 }
    49                 //计算今天是周几
    50                 var week= sum%7;//取7余数就是周几(如果一月一号正好是周一的话)
    51                 switch (week) {
    52                     case 0:
    53                         console.log("今天星期日");
    54                         break;
    55                     case 1:
    56                         console.log("今天星期一");
    57                         break;
    58                     case 2:
    59                         console.log("今天星期二");
    60                         break;
    61                     case 3:
    62                         console.log("今天星期三");
    63                         break;
    64                     case 4:
    65                         console.log("今天星期四");
    66                         break;
    67                     case 5:
    68                         console.log("今天星期五");
    69                         break;
    70                     case 6:
    71                         console.log("今天星期六");
    72                         break;
    73                 }
    74             } 
    75         </script>

    2.判断101-200之间有多少个素数,并输出所有素数。

    其中定义布尔类型做判断是开关逻辑思想,会常用。

            <script type="text/javascript">
                function prime(){
    //                for(var i=2;i<=100;i++){//打印出2-100的所有的数字
    //                    var flag = true;//定义一个布尔类型的值,
    //                        //console.log(i);
    //                    for(var j =2;j<i;j++){//可以输出j到i之间的数字,在这之间的数字判断是否还有和i之间可以取余的
    //                        //判断i是否能被j整除,取余为0代表可以被j整除,就不是素数,在不是宿舍的时候不进入
    //                        if(i%j==0){
    //                            flag = false;
    //                        }
    //                    }
    //                    if(flag){
    //                        console.log(i);
    //                    }//当flag为真的时候,输出i
    //                }
    //            }
    
                //方法二(类似)
                var flag = false;//先定义一个开关并且赋值布尔类型用来判断
                for (var i=2;i<100;i++){//控制需要判定的数字,从二开始递增到100
                    for(var j = 2; j<i;j++){//控制i以内的除数,必须比i小
                        if(i%j == 0){//判定i和j之间是否可以被整除,如果存在个j可以整除i,则不为素数
                            flag = false ;//不是素数的话就 把flag的值改为false
                            break;//跳出循环
                        }
                        else{//else则是素数的
                            flag = true;
                            }//是素数的话就输出i
                    }
                    if(flag){//输出放在大循环中,是素数就输出一次
                        //count++;
                         console.log("素数:"+i);
                    }
    
                }
            }
            </script>

    3.打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。

     1     <!--打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。-->
     2         <button onclick="flower()">水仙花数</button>
     3         <!--水仙花数是从100到1000的三位数-->
     4         <script type="text/javascript">
     5             var a,b,c;//声明三位数的三位变量
     6             function flower(){
     7                 for(var i=100;i<1000;i++){//遍历一百到一千的所有数字
     8                     a= i%10;//三位数的个位数     例如153 a=3...27  b5...125 c1....1
     9                     b =parseInt((i/10)%10);//十位数
    10                     c =parseInt(i/100) ;  //百位数  
    11 //                    console.log(a,b,c);  先看一眼对不对;
    12                 if(i== a*a*a+b*b*b+c*c*c){//是否满足水仙花数的条件
    13                     document.write(i+"<br />")
    14                 }
    15                 }
    16             }
    17         </script>

    4.将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 

    程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
    (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
    (2)如果n>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。

    (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

    <button onclick="number()">分解质因数</button>
            <!--将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 
            程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: 
            (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。 
            (2)如果n>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。 -->
            <script type="text/javascript">
                //思路 90/2=45
    //                45/3=15
    //                15/3=5
    //                90为输入的数字,分解数字应该是从2开始的,如果不行就递增的过程
    //                分解后的值应该重新定义在新的输入的变量中,一次打印出分解数字
                function number(){
                    var num = prompt("请输入一个数字");
                        for(var i = 2;i<num;i++ ){//i为分解的因数  所以 i必须小于num,在num之间找到分解的因数i
                            while(num%i==0 && num!=k){//如果成立的话,表示num被i分解
                                console.log(i);//打印出来因数i
                                //将分解的数字重新赋值继续计算,此刻就如同分析中的第二步骤,将计算出来的45赋值给num
                                num = num /i;
                            }
                            //如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可.
                            if(num==k){
                                console.log(k);
                                break;
                            }
                        }
                }
            </script>

    5.求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

        <button onclick="aa()">求叠加数字的和</button>
            <!--求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。-->
            <script type="text/javascript">
                //函数思路:前面一项乘以10再加上a,就是aa
                function aa(){
                    var a = parseInt(prompt("请输入一个数字:"));//假设输入2
                    var count =parseInt(prompt("请输入一个数字需要叠加的个数:")) ;//输入4
                    var sum = 0,n=0;//n表示每一个数的加数,sum用来存储相加的和  
                    for(var i=0; i<=count;i++){//表示从零开始到输入的个数  
                        n = n*10+a; //假设 n = 2  第二轮 n= 10+2
                         sum = sum+n;//sum = 2 
                    }
                    console.log(sum);
                }
            </script>

    6.猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下 的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

     1     <button onclick="fun6()">猴子</button>
     2         <script type="text/javascript">
     3             //思路:sum/2+1=猴子第一天吃的
     4             //第九天吃只剩 下一个了,就是i=9的时候  sum = 2*sum+1
     5             //逆向思维,从最后一天开始算
     6             function fun6(){
     7                 var sum = 1,i=9;//i是天数,sum是剩下的
     8                 while(i>=1){
     9                     sum = 2*sum+1  //当i为9的时候,sum为1  1/2-1,剩下了一个
    10                     i--;
    11                 }
    12             console.log(sum);
    13             }
    14     </script>

    7.计算用户输入的数字的阶乘,例如用户输入的是5,则计算5的阶乘,5的阶乘为 5*4*3*2*1

            <!--计算用户输入的数字的阶乘,例如用户输入的是5,则计算5的阶乘,5的阶乘为 5*4*3*2*1-->
            <!--思路:接收用户输入:n;
                2.阶乘的计算方法是n*(n-1)*(n-1-1)直到为1 利用循环实现
            -->
            <script type="text/javascript">
                function fun8(){
                    //接收用户输入
                    var n = prompt("请输入一个数字:计算它的阶乘");
                    var fac = 1;
                    //再定义一个变量用来存储其他乘数
                    for(var i=1;i<=n;i++){
                        fac = fac*i;
                    }
                console.log(fac);
                }
            </script>
            <button onclick="fun8()">计算阶乘</button>

    8.定义一个函数,返回1+1/3+1/5+1/7+....1/n的和

    <!--定义一个函数,返回1+1/3+1/5+1/7+....1/n的和-->
            <script type="text/javascript">
                //思路逻辑:从一开始,每次增加二,加到n
                function fun9(){
                //接受用户输入的n,再定义一个变量来接收他们的和
                    var n =parseFloat( prompt("请输入一个数:"));
                    var sum =0;
                    //从1开始的循环,每次增加两个
                    for(var i=1;i<=n;i+=2){
                        sum = sum + (1/i);
                        //var test = parseFloat(1/i) ; 测试用的
                    }
                    console.log(sum);
                }
            </script>
    <button onclick="fun9()">求....的和</button>

    9.定义一个函数,打印九九乘法口诀表

    <button onclick="fun10()">乘法口诀表</button>
            <!--打印乘法口诀表-->
            <script type="text/javascript">
                //逻辑:每一列中输出i个乘法式,列循环不成立输出一个换行,行+1继续循环列
                function fun10(){
                    for(i=1;i<=9;i++){//控制行
                        for(j=1;j<=i;j++){//控制列
                            var pro = i*j;
                            document.write(i+"*"+j+"="+pro +"	");
                        }
                        document.write("<br />")
                    }
                }
            </script>

     10.有一张0.0001米的纸,对折多少次可以达到珠穆朗玛峰的高度8848;

    <!--.有一张0.0001米的纸,对折多少次可以达到珠穆朗玛峰的高度8848m;-->
            <script type="text/javascript">
                function mountain(){
                    var h =0.0001;
                    for(var i=1;i>0;i++){//这个循环表示每次折叠h高度增加两倍,i用来存储折叠的次数。
                        h=h*2;
                        if(h>8848){//如果高度一定达到了,8848的时候就跳出循环
                            break;
                        }
                    }
                }
                console.log(i);
            </script>
            <button onclick="mountain()">计算珠峰</button>

    11.羽毛球拍15元,球3元,水2元。200元每种至少一个,有多少可能羽毛球拍最多买13个 球最多买66个 水最多买100个

    <!--羽毛球拍15元,球3元,水2元。200元每种至少一个,有多少可能 羽毛球拍最多买13个 球最多买66个 水最多买100个-->
            <!--思路:每个都循环出所有的可能性,然后在符合相加=200的时候输出-->
            <script type="text/javascript">
                //声明一个变量存储可能性的数值
                var pos=0;
                for(var i=1;i<=13;i++){//羽毛球拍
                    for(var j=1;j<=66;j++){
                        for(var k=1;k<=100;k++){
                            if(i*15+j*3+k*2){//每次符合条件的可能性就自动加一
                                pos++;    
                            }
                        }
                    }
                }
                console.log(pos);
            </script>

    12.定义函数,去掉数组中重复元素

    // 2.定义函数,去掉数组中重复元素
            function unique(arr){
    
                // 1.循环从arr中取值,i从0,同时创建空数组result
                for(var i=0,result=[];i<arr.length;i++){
                    // 2. 循环遍历result,j从0
                    for(var j=0;j<result.length;j++){
                        // 3.如果result中当前元素等于arr中当前元素  arr中的这个数在新数组中已经存在
                        if(arr[i]==result[j]){
                            break;//退出循环
                        }
                    }// 遍历结束
                    // 如果j等于result的length  表示这个元素在新数组中不存在 
                    if(j==result.length){
                        // 将arr中当前元素,追加result末尾
                        result[result.length]=arr[i];
                    } 
                        
                }// 遍历结束
                return result;// 给出返回值
            }
            function testUnique(){
                var arr=[1,1,2,2,3,4,3,5,6];
                var result=unique(arr);
                console.log(result);
            }

     13.从键盘接受10个整数,求出其中的最大值和最小值。

    <script type="text/javascript">
                function max_min(){
                    //定义一个数组,接收用户输入
                    var arr=[];
                    for(var i=0;i<10;i++){//接收用户输入十次(因为是从0开始的所以i<10),在十次结束后
                        arr[i] = prompt("请输入一个整数");
                        alert("已经输入了"+(i+1)+"次");//弹框提示输入了几次
                    }
                    console.log(arr);    
                    var max=arr[0];//声明一个变量,用来存储最大的值
                    for(i=0;i<arr.length;i++){//遍历arr【】中的所有的数字
                        if(max<arr[i]){//如果比后面元素数字小的话就,换位置,保证第一个元素是最大的
                            var temp ;//声明一个空值来换位置
                            temp=max;
                            max = arr[i];
                            arr[i] = temp;
                        }
                    }
                    console.log("最大值为"+max);
                
                    var min=arr[0];
                    for(i=0;i<arr.length;i++){
                        if(min>arr[i]){
                            var temp ;
                            temp=max;
                            min = arr[i];
                            arr[i] = temp;
                        }
                    }
                    console.log("最小值为"+min);
                }
            </script>
            <button onclick="max_min()">输入数字,求最大值和最小值</button>

    14.输入10个数,保存在一个数组中,在数组中查找某个数字,给出是否找到信息,如果找到了输出该数在数组中所处的位置,如果找不到输出“找不到”

    <script type="text/javascript">
                function check(){
                    //首先接收用户输入十次
                    var arr =[];
                    for(i=0;i<10;i++){
                        arr[i] = prompt("请输入十个整数");
                        alert("已经输入了"+(i+1)+"次");
                    }
                    //声明一个变量,存储用户输入要查找的数字
                    var num= prompt("输入要查找的数字") 
                    //遍历数组
                    for(i=0;i<arr.length;i++){
                        if(num == arr[i]){
                            alert("找到了,在第"+ (i+1)+"位");
                        }
                        else{
                            alert("找不到,输入错了吧");
                        }
                    }
                }
            </script>
            <button onclick="check()">查找数字在哪</button>

    15.顾客从超市采购了10件商品,编写一个程序,用于接受每件商品的价格,计算应付的总金额。并分别打印出各个商品的价格以及应付的总金额的小票。

        <script type="text/javascript">
                //先写一个空数组,用循环来接收输入的值
                var arr=[];
                var sum = 0;//存储总量
                for(i=0;i<10;i++){
                    arr[i] =Number( prompt("请输入商品的价格:"));
                    console.log("商品单价是"+arr[i]);
                    alert("已经输入了"+(i+1)+"件商品");
                }
                //计算总和
                for(i=0;i<10;i++){
                    sum+=arr[i];    
                }
                console.log("商品总价是"+sum);
                
            </script>

     16.编写一个程序,用于产生20个0-10之间的随机数,将这20个随机数存入数组,并通过函数统计这些随机数中某个数出现的次数

    思路: 先声明一个数组用来存储所有的随机数的值,然后接受用户输入一个值,依次去比较有没有重复的,有的话计数器(time)加一

     1 <script type="text/javascript">
     2             //先声明一个数组
     3             var arr= new Array(20);
     4             var time=0;
     5             for(var i=0;i<arr.length;i++){
     6                 arr[i] = parseInt(Math.random()*10) ;
     7             }
     8             console.log(arr);
     9             //遍历arr中的所有的数字,
    10             var num = Number(prompt("输入一个数判断出现的次数:"))
    11             for(var i=0;i<arr.length;i++){
    12 //                for(var j=0;j<arr.length-i-1;j++){
    13                     if(num==arr[i]){
    14 //                        console.log("重复的"+arr[j]);
    15                         time++;
    16                     }
    17 //                }
    18             }
    19             console.log(time);
    20         </script>

    17.将一个数组中的元素逆序输出,即第一个元素和最后一个元素交换,第二个数与倒数第二元素交换…..,

    例如:原数组为:9 2 5 7 8,逆序后的数组为:8 7 5 2 9

    这个题主要是要用逆向排序的思路典型

    先声明一个数组,存储用户输入,然后再逆向输出

        <script type="text/javascript">
                function fun4(){
                    var arr = new Array(6);
                    for(var i=0 ;i<arr.length;i++){
                        arr[i]=Number(prompt("请输入第"+(i+1)+"个数字"));
                    }
                    for(var j=arr.length-1;j>=0;j--){
                        console.log(arr[j]);
                    }
        //            arr.reverse();
                    console.log(arr);
                }
            </script>

    18.对信息加密:每个字符串都转换成Unicode码 保证每一位字符都是五位Unicode码---不够的话用0补上

    通过Unicode码解密字符

     1         <button onclick="fix()">加密</button>
     2         <button onclick="auto()">输入一段话加密</button>
     3         <button onclick="decode()">解密</button>
     4         <script type="text/javascript">
     5             function fix(){
     6 //                转换520 1314
     7                 var num = "520 1314";
     8                 //分解为每一个单个的字符
     9                 num = num.split("");
    10                 //把每一个元素都转换成Unicode码  并且存入到原数组中
    11                 for(i=0;i<num.length;i++){
    12                     num[i]= "000"+num[i].charCodeAt();
    13                 }
    14                 console.log(num);
    15                 
    16                 //转换汉字 “今天八点,不见不散”
    17                 var word = "今天八点,不见不散";
    18                 word = word.split("");
    19                 for(i=0;i<word.length;i++){
    20                     word[i]= word[i].charCodeAt();
    21                 }
    22                 console.log(word);
    23             }
    24             
    25         function  auto(){
    26             var input = prompt("请输入一段话:");
    27 //            console.log(input.length); 
    28 //             console.log("25715".length);
    29 
    30             var morse  = input.split("");
    31 //            console.log(morse);
    32             for(i=0;i<morse.length;i++){
    33                 //获取字符串有几位
    34                 if(String(morse[i].charCodeAt()).length==1){
    35                     morse[i]="0000"+morse[i].charCodeAt();
    36                 }
    37                 if(String(morse[i].charCodeAt()).length==2){
    38                     morse[i]="000"+morse[i].charCodeAt();
    39                 }
    40                 if(String(morse[i].charCodeAt()).length==3){
    41                     morse[i]="00"+morse[i].charCodeAt();
    42                 }
    43                 if(String(morse[i].charCodeAt()).length==4){
    44                     morse[i]="0"+morse[i].charCodeAt();
    45                 }
    46                 if(String(morse[i].charCodeAt()).length==5){
    47                     morse[i]=morse[i].charCodeAt();
    48                 }
    49             }
    50             console.log(morse);
    51         }    
    52         function decode(){
    53             //获取到输入的五位数的密码
    54             var input = prompt("请输入一个五位数的Unicode码,不够的用0补齐");
    55             password =String.fromCharCode(input);
    56             console.log(password);
    57         }
    58         
    59         var msg="今晚八点,不见不散w123";
    60         function encode(msg){
    61             for (var i = 0,code ="";i<msg.length;i++){
    62                 var u =msg.charCodeAt(i);
    63                 code += (u+100000+"").slice(1);//u是每个数的Unicode码,把u加上100000再把1去掉第一位一,这种方法最多只能有一位
    64             }
    65             return code;
    66         }
    67         var  code = encode(msg);
    68         console.log(code);
    69         
    70         function decode2(code){
    71             var information = n0                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ();
    72             for(i=0;i<code.length;i+=5){
    73                 information[i]= code.slice(i,i+5)+"	";
    74             }
    75             console.log(information);
    76         }
    77         var information = decode2(code);
    78         console.log(information);
    79         
    80         </script>
    81         

    19. 有一对幼兔,幼兔1个月后长成小兔,小兔1个月后长成成兔并生下一对幼兔,问几年后有多少对兔子,幼兔、小兔、成兔对数分别是多少。

    var a,b,c,sum;
                 for(var i=1;i<=12;i++){
                     //第一个月的时候
                     if(i==1){
                         a = 1;
                         b = 0;
                         c = 0;
                        sum = 1;
                     }else{
                         c = c + b;
                         b = a;
                         a = c;
                         sum = a + b + c;
                     }
                    document.write(i+"个月后有幼兔:"+a+"对,小兔:"+b+"对,成兔:"+c+"对;一共:"+sum+"对。")

    20.实现斐波拉切数列 1 1 2 3 5 8 13 21    特点:每前两个数相加等于第三个数, 前两 个数比较特殊,从第三个数开始。

    <script type="text/javascript">
       var num1 = 1;
       var num2 = 1;
       var sum = 0;
       for(var i=0;i<5;i++){
        sum = num1 + num2;
        num1 = num2;
        num2 = sum;
        
       }
       document.write(sum);
       sum = sum.toString();
       document.write(sum);
      </script>
  • 相关阅读:
    Hive安装教程
    HBase安装教程
    Hadoop集群搭建
    Redis集群安装详细步骤
    Python绘图工具turtle库的使用
    python程序语法元素分析
    Selenium请求库爬取京东商品实例
    python爬虫入门
    python入门
    pytest fixture场景一:参数传入
  • 原文地址:https://www.cnblogs.com/wangzheng98/p/10864424.html
Copyright © 2011-2022 走看看