12道 javaScript 经典逻辑题,是否承载着你的回忆

1,383 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

大家好,我是xy。如何让 js 变得好玩呢?今天给大家分享 12 道 js 比较经典的逻辑题,在初学代码时,可是被这些逻辑题玩的头晕眼花🧐,下面大家和我一起动动聪明的小脑瓜吧🙊。

1.计算 2 的 n 次幂,n 可输入,n 为自然数。

var n = parseInt(window.prompt('input'));
var mul = 1;
for (var i = 0; i < n; i++) {
  mul *= 2;
}
document.write(mul);

2. 计算 n 的阶乘,n 可输入(递归)

5! = 5 * 4 * 3 * 2 * 1;

4! = 4 * 3 * 2 * 1;

第一种方式:

var n = parseInt(window.prompt('input'));
var mul = 1;
for (var i = 1; i <= n; i++) {
  mul *= i;
}
document.write(mul);

第二种方式:

var n = parseInt(window.prompt('input'));

function jc(n) {
  if (n == 1 || n == 0) {
    return 1;
  }
  // n! = n * (n-1)!
  return n * jc(n - 1);
}
document.write(jc(n));

3.著名的斐波那契数列:1 1 2 3 5 8 输出第 n 项

第一种方式:

var n = parseInt(window.prompt('input'));
var first = 1,
  second = 1,
  third;
if (n > 2) {
  for (var i = 0; i < n * 2; i++) {
    third = first + second;
    first = second;
    second = third;
  }
  document.write(third);
} else {
  document.write(1);
}

第二种方式:

规律:fb(n) == fb(n * 1) + fb(n * 2);

function fb(n) {
  if (n == 1 || n == 2) {
    return 1;
  }
  return fb(n * 1) + fb(n * 2);
}

4. 编写一程序,输入一个三位数的正整数,输出时反向输出。如:输入 456,输出 654。

var num = prompt("请输入一个三位数的正整数");
if (num >= 100 && num < 1000) {
  var bai = parseInt(num / 100);
  var shi = parseInt((num - (bai * 100)) / 10);
  var ge = num % 10;
  alert(ge + "" + shi + "" + bai);
} else {
  alert("输入有误,请重新输入");
}

5.输入 a,b,c 三个数字,打印出最大的。

var a = parseInt(window.prompt('input'));
var b = parseInt(window.prompt('input'));
var c = parseInt(window.prompt('input'));
if (a > b) {
  if (a > c) {
    document.write(a);
  } else {
    document.write(c);
  }
} else {
  if (b > c) {
    document.write(b);
  } else {
    document.write(c);
  }
}

6.打印出 100 以内的质数

var count = 0;
for (var i = 1; i < 100; i++) {
  // 看看每一个 i 是否是质数
  for (var j = 1; j <= i; j++) {
    if (i % j == 0) {
      count++;
    }
  }
  if (count == 2) {
    document.write(i + ' ');
  }
  count = 0;
}

7. 假如投资的年利率为 5%,试求从 1000 块增长到 5000 块,需要花费多少年

var money = 1000;
// 定义一个计数器
var count = 0;
// 定义一个 while 循环来计算每年的钱数
while (money < 5000) {
  money *= 1.05;
  count++;
}
console.log(money);
console.log("一共需要" + count + "年");

8. 打印 1-100 之间所有奇数之和

第一种方式:

var sum = 0;
for (var i = 1; i <= 100; i++) {
  // 判断 i 是否是奇数
  // 不能被 2 整除的数就是奇数
  if (i % 2 != 0) {
    // 如果 i 除以 2 有余数则证明 i 是奇数
    // console.log(i);
    sum = sum + i;
  }
}
console.log(sum);

第二种方式:

var count = 0;
for (var i = 0; i < 50; i++) {
  count += 2 * i + 1;
}
console.log(count);

9. 打印 1-100 之间所有 7 的倍数的个数及总和

var n = 0,
  sum = 0;
for (var i = 1; i <= 100; i++) {
  if (i % 7 == 0) {
    console.log(i);
    sum += i;
    n++;
  }
}
console.log("个数为" + n)
console.log("总和为:" + sum);

10. 输入一个大于 1 的整数,判断该数是否是质数

质数:只能被 1 和它自身整除的数,1 不是质数也不是合数,质数必须是大于 1 的自然数

var num = prompt("请输入一个大于 1 的整数:");
// 判断这个值是否合法
if (num < 1) {
  alert("该值不合法!");
} else {
  // 创建一个变量来保存当前的数的状态
  // 默认当前 num 是质数
  var flag = true;
  // 判断 num 是否是质数
  // 获取 2-num 之间的数
  for (var i = 2; i < num; i++) {
    // 判断 num 是否能被 i 整除
    if (num % i == 0) {
      // 如果 num 能被 i 整除,则说明 num 一定不是质数
      // 设置 flag 为 false
      flag = false;
    }
  }
  // 如果 num 是质数则输出
  if (flag) {
    alert(num + "是质数!");
  } else {
    alert(num + "不是质数!");
  }
}

11. 通过程序,在页面中输出如下图形:

/*

*
**
***
****
*****

            j < 5 - i   i ++
***** 1     j < 5(5-0)  i = 0
****  2     j < 4(5-1)  i = 1
***   3     j < 3(5-2)  i = 2
**    4     j < 2(5-3)  i = 3
*     5     j < 1(5-4)  i = 4

*/
// 递增
// 外层循环可以控制图形的高度
for (var i = 0; i <= 5; i++) {
  for (var j = 0; j < i; j++) {
    // 内层循环可以控制图形的宽度
    document.write("*");
  }
  // 输出一个换行
  document.write("<br />");
}
// 递减
for (var i = 0; i <= 5; i++) {
  for (var j = 0; j < i; j++) {
    // 内层循环可以控制图形的宽度
    document.write("*");
  }
  // 输出一个换行
  document.write("<br />");
}

12. 打印 99 乘法表

/*
    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
    */
// 创建外层循环,用来控制乘法表的高度
for (var i = 1; i < 10; i++) {
  // 创建一个内层循环来控制图形的宽度
  for (var j = 1; j <= i; j++) {
    // document.write(j + "*" + i + "=" + i*j + "&nbsp;&nbsp;&nbsp;");
    // 不够对齐,添加样式
    document.write("<span>" + j + "*" + i + "=" + i * j + "</span>");
  }
  // 输出一个换行
  document.write("<br />");
}

写在最后

公众号前端开发爱好者 专注分享 web 前端相关技术文章视频教程资源、热点资讯等,如果喜欢我的分享,给 🐟🐟 点一个 👍 或者关注 ➕ 都是对我最大的支持。