面试题之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^3 + 5^3 + 3^3 = 153)

水仙花数是指一个3位数,它的每个位上的数字的3次幂之和等于它本身。

// 打印所有的三位数
for (var i = 100; i < 1000; i++) {
    // 获取i的百位 十位 个位的数字
    // 获取百位数字
    var bai = parseInt(i / 100);
    // 获取十位数字
    var shi = parseInt((i - bai * 100) / 10);
    // 获取个位数字
    var ge = i % 10;
    // 判断i是否是水仙花数
    if (bai * bai * bai + shi * shi * shi + ge * ge * ge == i) {
        console.log(i);
    }
}

11. 输入一个大于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 + "不是质数!");
    }
}

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

/*

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

            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 />");
}

13. 打印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 />");
}
发布了11 篇原创文章 · 获赞 0 · 访问量 101

猜你喜欢

转载自blog.csdn.net/qq_39347364/article/details/104961998