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 +"\t");
                    }
                    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)+"\t";
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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM