本章目录
----------① 10以内的奇数偶数
----------② 输出乘法口诀表
----------③ 找出100以内与7相关的数
----------④累加求和
----------⑤求10的阶乘
----------⑥兔子题
----------⑦折纸达到珠峰高度
----------⑧200元买三种东西花光所有钱
----------⑨100文买鸡
----------⑩凑钱1,2,5凑20元钱有多少可能
----------⑪填写加减使等式成立
----------⑫棋盘芝麻
----------⑬篮球弹跳
----------⑭阶乘相加
----------⑮阶乘相加
----------⑯找闰年
一、找出十以内的奇数和偶数
//10以内奇数偶数 //10以内,代表循环条件,奇数偶数是判断条件,偶数是除以2余0的数,而奇数是自然数中除偶数之外的所有数,不能被2整除的数 for( var i=0;i<=10;i++){ //定义循环的条件,从0开始判断,范围包括10以内,每次执行+1; if(i%2==0){ //该判断的意义为,如果能够被2整除余数是0,则进入内部的数是偶数,然后输出 document.write("偶数是:"+i+"<br />") } else{ //那么除了偶数就是奇数 document.write("奇数是:"+i) } } //十以内与7相关的数
输出结果:
二、输出乘法口诀表
所有的公式可以写为a*b=c的形式,那么口诀表的格式如下
1*1=1;
1*2=2;2*2=4;
1*3=3;2*3=6;3*3=9;
1*4=4;2*4=8;3*4=12;4*4=16;
我们发现,每一列的a是相同的数值,且从第一列开始每次+1
每一行的b是相同的数值,且从第二行开始每次+1;
//可以先定义a的范围及a的运算形式,每次+1 for(var a=1;a<10;a++){ //然后定义b的范围,每次+1,并且使用b<=1,去重复的公式,避免出现1*1--1*9;2*1--2*9的重复 for(var b=1;b<=a;b++){ //定义ab的乘积 var c = a*b; //输出因为a的每次+1换行,所以使b显示在前,a显示在后 document.write(b+"*"+a+"="+c+";") } document.write("<br>"); }
结果:
三、找出100以内与7相关的数
我们可以考虑所有与7相关的数,有下面几种情况
① 判断能被七整除的,
② 尾数是7的数, 除以10余7的,
③ 十位数是7的数字, (除以10的整数部分)除以10等于7的,
//首先定义循环,遍历每一个小于等于100的数字 for(var seven=0;seven<101;seven++){ //判断能被七整除的,除以10余7的(尾数是7的数),(除以10的整数部分)除以10余7的,这是十位数是7的数字 if(seven%7==0 || seven%10==7 || parseInt(seven/10)==7){ document.write(seven+" "); } }
输出结果:
四、累加求和,求0-100之间的和,
0+1+2+3+4+5...+100,
每次总数等于之前的和加当前的数,而当前的数是递加1
var sum = 0;//定义变量盛放总数,0+任何数都等于原来的数 //循环,从0开始加到100 for(var i=0;i<101;i++){ //因为i从0开始,i每次加1.所以总数=上一次的总数+i当前的数 sum = sum+i; //0 1 3 6 } document.write(sum);
输出结果:
五、求10的阶乘
数学表达方式1*2*3*4*5....*10
//首先想到的是规定范围,从1开始(排除0,因为0乘以任何数为0),最高循环到10 var factorial =1;//因为是乘法,所以默认值是1,1乘以任何数为原来的数 for(var i=1;i<11;i++){ //阶乘等于上一个得出来的积再乘以当前数 factorial = factorial*i; } document.write(factorial);
输出结果:
六、兔子题
题目:有一对幼兔,幼兔1个月后长成小兔,小兔1个月后长成成兔并生下一对幼兔,问8个月后有多少对兔子,幼兔、小兔、成兔对数分别是多少。
题目解析
月份 0 1 2 3 4 5 6 7 8
幼兔 1 0 1 1 2 3 5 8 13
小兔 0 1 0 1 1 2 3 5 8
成兔 0 0 1 1 2 3 5 8 13
从第一个月开始看,规律是
小兔初始值为1;每个月的小兔等于上个月的幼兔
成兔初始值为0,每个月的成兔等于上个月的成兔+上个月的小兔
幼兔初始值为0,每个月的幼兔等于上个月的小兔+上个月的额成兔
var yt =1; var xt =0; var ct =0; for(var month=1;month<9;month++){ //成兔等于上个月的成兔+上个月的小兔 ct = ct + xt; //小兔等于上个月的幼兔 xt = yt; //yt = xt + ct因为xt已经赋值,所以会出现yt等于之前的和,所以找到新规律,当前月的小兔等于当前月的成兔 yt = ct; } alert(ct+yt+xt)
输出结果:
七、折纸达到珠峰高度
题目:折多少次和珠穆朗玛峰一样高,一张纸的厚度是0.0001米,将纸对折,对折多少次厚度超过珠峰高度8848米
定义纸的厚度,每次运行对折一次,即为原来的二倍厚度,判断厚度大于8848的时候记录循环次数并跳出
var h = 0.0001;
//从第一次对折开始
for(var i=1;i>=0;i++)
{
//每次对折当前高度等于上次高度*2倍
h = h*2;
//判断如果h的厚度大于8848的时候,输出i的对折次数
if(h>8848)
{
alert(i);
break; //该处执行一次并跳出,否则继续运行
}
}
输出结果:
八、200元买三种东西花光所有钱
题目:羽毛球拍15元,球3元,水2元。200元每种至少一个,有多少可能
羽毛球拍x最多买13个 球y最多买66个 水z最多买100个 以及 15x+3y+2z=200
var sum = 0;//容器存放次数 //x的可能最少1次,所以循环范围最多的次数-1 for(var x=1;x<15;x++){ //y的可能最少1次,所以循环范围最多的次数-1 for(var y=1;y<66;y++){ //z的可能最少1次,所以循环范围最多的次数-1 for(var z=1;z<100;z++){ //判断三种物品的价格相加等于200的可能再次运行 if(x*15+y*3+z*2==200){ sum++;//每次符合条件,计数器+1 } } } } alert(sum);
输出结果:
九、100文买鸡
题目:公鸡2文,母鸡1文,小鸡半文,每种至少一只,100文买100只鸡有多少可能性
公x最多可能50种可能 母y最多可能100种可能 小z最多200种可能 以及 2x+y+0.5z=100
var sum = 0;//容器存放次数 //x的可能最少1次,所以循环范围最多的次数-1 for(var x=1;x<51;x++){ //y的可能最少1次,所以循环范围最多的次数-1 for(var y=1;y<101;y++){ //z的可能最少1次,所以循环范围最多的次数-1 for(var z=1;z<201;z++){ //判断三种物品的价格相加等于200的可能再次运行 if(2*x+y+0.5*z==100 && x+y+z==100){ sum++;//每次符合条件,计数器+1 } } } } alert(sum);
输出结果:
十、凑钱1,2,5凑20元钱有多少可能
1块钱x最多可能20种可能, ,2元钱y最多可能10种可能 5块钱z最多4种可能 以及 x+2y+4z=100
var sum = 0;//容器存放次数 //因为没有规定最少存在1次所以初始值=0,所以循环范围最多的次数等于可能的最多次数 for(var x=0;x<21;x++){ for(var y=0;y<11;y++){ for(var z=0;z<5;z++){ if(x+2*y+5*z==20){ sum++; } } } } alert(sum);
输出结果:
十一、填写加减使等式成立
题目:括号里面只能放加或减,如果要使等式成立,括号里面应该放什么运算符 12()34()56()78()9 = 59;
加减号可以使用当前数字乘以1或乘以-1代替,并且区分每个加减号,规定ijkl为四个变量存储1或-1
四个运算符,每个运算符有+或-两个选项12+i+34+j+56+k+78+l+9+"="+59
//规定循环,数字初始值为-1,每次运行+2,得到1,最大值为1; for(var i=-1;i<2;i+=2){ for(var j=-1;j<2;j+=2){ for(var k=-1;k<2;k+=2){ for(var l=-1;l<2;l+=2){ //判断等式成立 if(12+i*34+j*56+k*78+l*9==59){ //为每个ijkl变量赋予+号或-号 if(i==1){ i="+"; } else{ i="-" } if(j==1){ j="+"; } else{ j="-" } if(k==1){ k="+"; } else{ k="-" } if(l==1){ l="+"; } else{ l="-" } alert(12+i+34+j+56+k+78+l+9+"="+59); } } } } }
输出结果:
十二、棋盘芝麻
题目:棋盘有32个格子,第一个格子放1个芝麻,第二个放2个,第三个放4个,第四个放8个。。。每个芝麻的重量为0.00001kg,如果要放满整个棋盘,需要多少重量的芝麻。
芝麻数量 1 2 4 8 16 32
相应格子 1 2 3 4 5 6
相应算法 1*2^0 1*2^1 1*2^2 1*2^3 1*2^4 1*2^5
//定义总数量 var sum =0; for(var i=1;i<33;i++){ //每次进入下一个格子的时候保证a初始值=1,因为,计算下面的循环,a初始值必须为1; var a =1; var n =2; for(var j=1;j<i;j++){ /*进入该循环时,每次执行a = a*2,并且j始终小于i一个数, 所以 当i=1的时候是第一格,不执行,跳出,a=1; 当i=2的时候第二格,执行一次,a=2;跳出 当i=3的时候第三个,执行两次,a=4,跳出 */ a = a*n; } //总数量初始值为0,等于上次总数+当前格子数 sum = sum + a; } alert(sum*0.00001)
输出结果 :
十三、篮球弹跳
题目:篮球从10米高的地方落下,每次弹起的高度是原来的0.3倍,问弹跳10次之后篮球的高度。
//初始高度 var h =10; //循环条件弹跳次数, for(var i=1;i<11;i++){ //循环内容高度改变, h = 0.3*h; } alert("弹跳10次之后篮球的高度为:"+h);
输出结果:
十四、阶乘相加
题目:计算 1!+2!+3!+…..+10!的结果。
算法
1 1
1*2 1*2 =2
1*2*3 2*3 =6
1*2*3*4 6*4 =24
1*2*3*4*5 24*5=120
左侧是当前的阶乘,每次阶乘等于上次阶乘乘以当前数字
右侧是代表当前的和等于之前的和加当前的阶乘
var a = 1; var sum = 0;//定义存储和的容器 //循环范围,十以内 for(i=1;i<11;i++){ //计算当前的阶乘,每次循环等于上次的阶乘乘以当前数字 a = a*i; //计算和,每次和等于上次的和+当前的阶乘 sum = sum + a; } alert(sum);
输出结果:
十五、找闰年
题目:输出1000年到2018年的所有闰年
凡是能被4整除的年份,但这里面有以及凡是能被400整除且不能被100整除的
两种写法
第一种
var sum = 0;//定义计算闰年数的容器 //循环遍历规定范围内的每一年 for(var y=1000;y<=2018;y++){ //遍历出每一种能被4除的年份 if(y%4==0){ //凡是能被100整除的年份之中找到只能被400整除的 if(y%100==0){ if(y%400==0){ document.write("<div>"+y+"</div>"); sum++; } } //除了上面的可能,凡是被4整除的年份列举 else{ document.write("<div>"+y+"</div>"); sum++; } } } document.write("<div><br />闰年一共有:"+sum+"年</div>")
第二种
var sl = 0;//定义计算闰年数的容器 //循环遍历规定范围内的每一年 for(var i=2010;i<2019;i++) { //判断能被400整除或者能被4整除并且不能被100整除的年份 if(i%400==0 || i%4==0 && i%100!=0) { document.write(i); sl++; } } alert(sl);
输出结果