程序设计原则:把计算过程交给计算机

程序设计原则:把计算过程交给计算机

一道简单的数学题
首先,我们先看一道很简单的数学问题,求出 1000 以内所有 3 或 5 倍数的数字的和。

  1. 把计算过程,交给计算机

写程序的一个目的,就是减少我们人类在解决问题中的具体计算过程

#include <stdio.h>
int main() {
    int sum = 0;
    for (int i = 1; i < 1000; i++) {
        sum += i * (i % 3 == 0 || i % 5 == 0);  
    }
    printf("%d\n", sum);
    return 0;
}

这段程序中,循环遍历 1000 以内的所有整数,然后把 3 或 5 的倍数累加到变量 sum 中,最后输出 sum 变量的值,就是 1000 以内,所有 3 或 5 的倍数和。

其中有一个编程技巧,就是利用条件表达式 (i % 3 == 0 || i % 5 == 0) 与数字 i 相乘,条件表达式等于 1 的时候,说明 i 是 3 或 5 的倍数,sum 累加的值就是 i * 1 就是 i 的值;而当条件表达式不成立的时候,sum 累加的值就是 0。掌握这个编程技巧,关键是理解条件表达式的值。

  1. 数学思维:提升计算效率
#include <stdio.h>
int main() {
    int sum3 = (3 + 999 / 3 * 3) * (999 / 3) / 2;
    int sum5 = (5 + 999 / 5 * 5) * (999 / 5) / 2;
    int sum15 = (15 + 999 / 15 * 15) * (999 / 15) / 2;
    printf("%d\n", sum3 + sum5 - sum15);
    return 0;
}

上面程序中,有三个整型变量分别代表 1000 以内所有 3 的倍数的和 sum3,所有 5 的倍数的和 sum5,和所有 15 倍数的和 sum15。最后呢,用 sum3 + sum5 - sum15 的值,代表了 3 或 5 的倍数的和。

在 C 语言中,两个整型数字相除,结果会做向零取整,什么是 向零取整呢?解释这个概念之前,先要介绍一下向下取整的概念,所谓向下取整,就是取小于等于当前数字的第一个整数。

取当前数字和 0 之间,与前数字距离最近的整数。

将计算过程,留给计算机

“平方和”以及“和的平方”

例如,10 以内自然数的平方和就是:
1^2 + 2^2 + 3^2 + 4^2 + 5^2 + 6^2 + 7^2 + 8^2 + 9^2 + 10^2 = 385
也就是 1 到 10 每个数字的平方相加之和。
而,10 以内自然数的和的平方就是:
(1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10) ^ 2 = 3025
也就是 1 到 10 所有数字相加之和,然后再取平方的值。

小结

具体的计算过程,计算机比你更擅长,所以请把具体的计算过程,留给计算机。
编写程序,其实是在描述和规定计算过程,而描述的方式不同,效率也不同。
不同的效率过程,就是我们所谓的不同的算法过程,记住:算法很重要。

上一篇:Leetcode 999. 车的可用捕获量 C++


下一篇:python求100~999以内的水仙花数,要求用循环语句和判断语句