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