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>
  • 相关阅读:
    【故障处理】ORA-12162: TNS:net service name is incorrectly specified (转)
    android studio 编程中用到的快捷键
    java时间格式串
    android Error occurred during initialization of VM Could not reserve enough space for object heap Could not create the Java virtual machine.
    linux安装vmware
    x1c 2017 安装mint18的坑——grub2
    x1c2017 8G版 win linux的取舍纠结记录
    python的try finally (还真不简单)
    kafka+docker+python
    json文件不能有注释
  • 原文地址:https://www.cnblogs.com/wangzheng98/p/10864424.html
Copyright © 2011-2022 走看看