什么是算法

  • 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。
  • 算法就是把一个问题,拆解为计算机能够一步一步执行的步骤。

  • 计算机的流程控制语句:顺序执行、选择语句、循环语句。

优秀算法的要求

  • 正确性
  • 健壮性 
  • 可读性

伪代码

  • 计算1+2+3+……+99+100的和。

累加器题目

  • 由用户输入数字n,请计算下面算式的值。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 由用户输入数字n,计算3/2 + 4/3 + 5/4 + …… + (n+1)/n的结果

        // 用户输入数字n
        var n = Number(prompt('请输入数字n'));

        // 累加器
        var sum = 0;

        // 遍历分母就可以了,因为分子就是分母加1
        for (var i = 2; i <= n; i++) {
            sum += (i + 1) / i;
        }

        alert(sum.toFixed(2));
    </script>
</body>

</html>

累乘器题目

  • 由用户输入数字n,请计算n的阶乘。
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 计算阶乘

        // 请用户输入数字n
        var n = Number(prompt('请输入数字'));

        // 累乘器,一定注意,累乘器要从1开始,因为如果从0开始,0乘以任何数字都是0,
        var result = 1;

        // 倒着遍历,计算阶乘
        for (var i = n; i >= 1; i--) {
            result *= i;
        }

        // 显示结果
        alert(result);
    </script>
</body>

</html>

同时用到累加器和累乘器的题目

  • 圆周率π可以由下面的莱布尼茨级数公式计算出来,请由用户输入参数n,计算圆周率π。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 用莱布尼茨级数估算圆周率
        // π = 2 * (1 + 1/3 + (1*2)/(3*5) + (1*2*3)/(3*5*7) + (1*2*3*4)/(3*5*7*9) + (1*……n)/(3*5*……2n+1))

        // 累加器,就是最后的答案,
        var sum = 0;
        // 累乘器,用来制作每一项,制作出来的这个项,要往累加器中累加
        var item = 1;

        // 让用户输入n
        var n = Number(prompt('请输入数字n'));

        // 遍历
        for (var i = 1; i <= n; i++) {
            // 要先制作出这一项,这一项怎么制作?要使用累乘器。item就是小车厢。
            item *= i / (2 * i + 1);
            // console.log(item);
            // 把车厢往累加器中累加
            sum += item;
        }

        // 显示结果
        alert((1 + sum) * 2);
    </script>
</body>

</html>

穷举法

  • 穷举法,顾名思义,是指根据题目的条件确定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕。若某个情况符合题目的条件,则为本问题的一个解;若全部情况验证后都不符合题目的条件,则本题无解。
  • 编程寻找100以内的既能被3整除,也能被5整除的数字。

  •  计算机穷举方法:

穷举法题目

  • 寻找全部的水仙花数。水仙花数是这样的一个3位数:它的每个数位的数字的立方和等于它本身。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 寻找水仙花数
        for (var i = 100; i < 1000; i++) {
            // 水仙花数要拆数位
            // a、b、c分别表示百位、十位、个位
            var i_str = i.toString();
            var a = i_str.charAt(0);
            var b = i_str.charAt(1);
            var c = i_str.charAt(2);

            if(Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3) == i) {
                console.log(i);
            }
        }
    </script>
</body>
</html>

循环嵌套题目

  • 请寻找1~100的所有质数。
  • 质数:只能够被1和它本身整除的数字,最小的质数是2。
  • 比如:2、3、5、7、11、13、17、19、23、29……
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 寻找100以内的质数

        // 穷举法
        outer: for (var i = 2; i <= 100; i++) {
            // 内层循环开始从2开始到小于这个数字的每一个数字都尝试除i,如果能够整除,说明它不是质数,就可以筛选下一个数字了
            for (var j = 2; j < i; j++) {
                if (i % j == 0) {
                    // 说明数字i不是质数,因为它找到了除1和它自身之外的约数了,测试下一个数字了
                    // continue表示放弃这个数字,开始迭代下个数字,continue它负责的是它所在的最内层的for循环
                    // 要给外层for循环加上label,然后在continue的后面加上这个label,
                    // 这样就表示立即开始迭代外层for循环的下一个数字了,而不是内层for循环
                    continue outer;
                }
            }

            // 能够遇见这条语句的数字i,一定是质数,否则就被continue略过了
            console.log(i);
        }
    </script>
</body>

</html>
  • 有鸡兔同笼,上有三十五头,下有九十四足,问鸡兔各几何。
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 鸡兔同笼的问题

        // 方法1:
        // // 假设小鸡有a只,兔子有b只
        // for (var a = 0; a <= 35; a++) {
        //     for (var b = 0; b <= 35; b++) {
        //         if (a + b == 35 && 2 * a + 4 * b == 94) {
        //             console.log('小鸡有' + a + '只,兔子有' + b + '只');
        //         }
        //     }
        // }

        // 方法2:
        // 假设小鸡有a只,那么兔子有35 - a只
        for (var a = 0; a < 35; a++) {
            var b = 35 - a;
            if (2 * a + 4 * b == 94) {
                console.log('小鸡有' + a + '只,兔子有' + b + '只');
            }
        }
    </script>
</body>

</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值