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的值,重复执行第一步。

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

<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>

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>

猜你喜欢

转载自www.cnblogs.com/wangzheng98/p/10864424.html
今日推荐