JavaScript循环的应用——逻辑案例
拓展应用:案例的输出用到了模板字符串(即反引号包着${变量}),它基本等同于双引号与加号拼接的效果。
1.求水仙花数
2.求素数(质数)
3.百鸡问题
4.百钱问题
5.斐波拉契数列
6.求和
7.求阶乘
8.求阶乘和
1.水仙花数:个位的立方+十位的立方+百位的立方=它本身
案例一: 输入一个三位数num,判断是否是水仙花数水仙花数
var num=prompt("请输入一个三位数:");
var bai=parseInt(num/100);
var shi=parseInt((num/10)%10);
var ge=parseInt(num%10);
if(ge*ge*ge+shi*shi*shi+bai*bai*bai==num){
console.log(`${num}是水仙花数`);
}else{
console.log(`${num}不是水仙花数`);
}
运行结果:
输入56
输入407
2.求素数(质数):除了1和本身不能被其他数整除
案例二:打印1~100之间的素数
//打印1~100之间的素数
//素数:除了1和它本身,没有其他了
for(var i=2;i<=100;i++){
//定义一个变量,假设它为质数
var flag=true;
for(var j=2;j<i;j++){
if(i%j==0){
flag=false;
break;
}
}
if(flag==true){
console.log(`质数:${i}`);
}
}
运行结果:
3.百鸡问题
案例三:100元买100只鸡,输出他的组合情况
//100元买100只鸡
//小鸡 1元/3只;公鸡 3元/只;母鸡 5元/只
//定义小鸡为i,公鸡为j,母鸡为k;
for(var j=0;j<=33;j++){
for(var k=0;k<=20;k++){
var i=100-j-k;
if(j*3+k*5+i*1/3==100){
console.log(`公鸡:${j}母鸡:${k}小鸡:${i}`);
}
}
}
运行结果:
4.百钱问题
案例四:把100元全部换成100张,输出他的组合情况
//实现百钱问题
//人民币有1毛,1元 10元 50元,打印所有组合
//100张人民币 总和正好是 100元,打印所有组合
//声明一毛为i;一元为j;十元为k;五十元为l;
for(var i=0;i<=1000;i++){
for(var j=0;j<=100;j++){
for(var k=0;k<=10;k++){
var l=100-i-j-k;
if(i*0.1+j*1+k*10+l*50==100){
console.log(`毛:${i}张;元:${j}张;十元:${k}张;五十:${l}张`);
}
}
}
}
运行结果:
5.斐波拉契数列
案例五:斐波拉契数列
1.打印斐波拉契数列的前n项
//键盘输入n,打印斐波拉契数列的前n项
//斐波拉契数列:1 1 2 3 5 8 13 21 34 55...
//前两项是1,后面的每一项都是前两项的和
var n = prompt("请输入n:");
//为什么定义两个变量?因为求前两个未知数之和,所以需要定义两个变量用来接收数据
//当前项
var current = 0;
//前一项
var before = 0;
for (var i = 1; i <= n; i++) {
//第一项无规律可循,先判断
if (i == 1) {
current = 1;
console.log(current);
continue;
}
//第一项无规律可循,先判断
if (i == 2) {
before = current;
current = 1;
console.log(current);
continue;
}
//下一项等于当前项加上一项之和
var after = current + before;
//把当前项赋值给前一项
before = current;
//把下一项赋值给当前项
current = after;
console.log(current);
}
运行结果:
输入5,打印前5项
2.打印斐波拉契数列的第n项
//键盘输入n,打印斐波拉契数列的第n项
//斐波拉契数列:1 1 2 3 5 8 13 21 34 55...
//前两项是1,后面的每一项都是前两项的和
var n = prompt("请输入n:");
//为什么定义两个变量?因为求前两个未知数之和,所以需要定义两个变量用来接收数据
//当前项
var current = 0;
//前一项
var before = 0;
//用来计数
var flag = 0;
for (var i = 1; i <= n; i++) {
flag++;
//第一项无规律可循,先判断
if (i == 1) {
current = 1;
continue;
}
//第一项无规律可循,先判断
if (i == 2) {
before = current;
current = 1;
continue;
}
//下一项等于当前项加上一项之和
var after = current + before;
//把当前项赋值给前一项
before = current;
//把下一项赋值给当前项
current = after;
}
console.log(`第${flag}项的值为${current}`);
运行结果:
输入5,打印第5项
6.求和
案例六:求和
//计算并打印1~100之间能被3整除的奇数和
var sum=0;
for(var i=1;i<=100;i++){
if(i%3==0 && i%2!=0){
sum=sum+i;
}
}
console.log(sum);
运行结果:
结果为867
7.求阶乘
案例七:求m的阶乘
//键盘输入m,打印m!
var m=prompt("请输入你要求的阶乘");
var fac=1;
for(var i=1;i<=m;i++){
fac = fac*i;
}
console.log(fac);
运行结果:
输入8,结果为40320
8.求阶乘和
案例八:求1~m的阶乘和
//1!+2!+...+m!
var m=+prompt("请输入m:");
var sum=0;
for(var i=1;i<=m;i++){
//求ii
var fac=1;
for(var j=1;j<=i;j++){
fac=fac*j;
}
sum=sum+fac;
}
console.log(sum);
运行结果:
输入2,结果为3