任务
求出 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++) { sum += i * (i % 3 == 0 || i % 5 == 0); } printf("%d\n", sum); return 0; }
|
提升计算效率
利用等差数列求和公式:
1 2 3 4 5 6 7 8
| #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; }
|
思考题
1,和的平方减平方和
- 请编写一个程序,计算 100 以内自然数“和的平方”与“平方和”的差。
- 能否通过查阅资料,推导得到等差数列的平方和公式呢?
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() { int n; scanf("%d",&n); printf("%d - %d = %d\n",hepingfang(n),pingfanghe(n),hepingfang(n)-pingfanghe(n)); }
|
小结
- 具体的计算过程,计算机比你更擅长,所以请把具体的计算过程,留给计算机。
- 编写程序,其实是在描述和规定计算过程,而描述的方式不同,效率也不同。
- 不同的效率过程,就是我们所谓的不同的算法过程,记住:算法很重要。