不会飞的章鱼

熟能生巧,勤能补拙;念念不忘,必有回响。

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

任务

求出 1000 以内所有 3 或 5 倍数的数字的和。

编码

一份合格的程序实现

1
2
3
4
5
6
7
8
9
#include <stdio.h>
int main() {
int sum = 0;
for (int i = 1; i < 1000; i++) { //循环遍历 1000 以内的所有整数
sum += i * (i % 3 == 0 || i % 5 == 0); //把 3 或 5 的倍数累加到变量 sum 中
}
printf("%d\n", sum); //最后输出 sum 变量的值,就是 1000 以内,所有 3 或 5 的倍数和。
return 0;
}

提升计算效率

利用等差数列求和公式:

1
2
3
4
5
6
7
8
#include <stdio.h>
int main() {
int sum3 = (3 + 999 / 3 * 3) * (999 / 3) / 2; //1000 以内所有 3 的倍数的和 sum3
int sum5 = (5 + 999 / 5 * 5) * (999 / 5) / 2; //1000 以内所有 5 的倍数的和 sum5
int sum15 = (15 + 999 / 15 * 15) * (999 / 15) / 2; //1000 以内所有 15 的倍数的和 sum15
printf("%d\n", sum3 + sum5 - sum15);
return 0;
}

思考题

1,和的平方减平方和

  1. 请编写一个程序,计算 100 以内自然数“和的平方”与“平方和”的差。
  2. 能否通过查阅资料,推导得到等差数列的平方和公式呢?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<stdio.h>

int hepingfang(int n) {
return (1 + n) * (1 + n) * n / 4 + n * (n * n - 1) / 12;
}

int pingfanghe(int n) {
return (1 + n) * (1 + n) * n / 4 + n * (n * n - 1) / 12;
}

int main() {
//计算 100 以内自然数“和的平方”与“平方和”的差
int n;
scanf("%d",&n);
printf("%d - %d = %d\n",hepingfang(n),pingfanghe(n),hepingfang(n)-pingfanghe(n));
}

小结

  • 具体的计算过程,计算机比你更擅长,所以请把具体的计算过程,留给计算机。
  • 编写程序,其实是在描述和规定计算过程,而描述的方式不同,效率也不同。
  • 不同的效率过程,就是我们所谓的不同的算法过程,记住:算法很重要。
------ 本文结束------
如果本篇文章对你有帮助,可以给作者加个鸡腿~(*^__^*),感谢鼓励与支持!