许多C++经典算法,方便学习和应用. 1、打印出所有的“水仙花数”。所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如,153是一水仙花数,因为153 = 13 + 53 + 33。 */ 根据给定文件的信息,我们可以总结出以下几个C++经典算法知识点: ### 1. 打印出所有的“水仙花数” **定义与解释:** 水仙花数(Narcissistic number)指的是一个三位数,它的各个位上的数字立方和等于它本身。例如,153 是一个水仙花数,因为 153 = 1³ + 5³ + 3³。 **实现代码解析:** ```cpp #include <iostream> using namespace std; void main() { int i, a, b, c; for (i = 100; i < 1000; i++) { // 遍历所有三位数 a = i % 10; // 获取个位数 b = i / 10 % 10; // 获取十位数 c = i / 100 % 10; // 获取百位数 if (a * a * a + b * b * b + c * c * c == i) { cout << "i=" << i << endl; } } } ``` **核心逻辑:** - 使用循环遍历100到999之间的所有数字。 - 对每个数字进行拆分,分别获取百位、十位和个位。 - 检查这个数字是否等于其各位数字立方和。 - 如果条件成立,则输出该数字。 ### 2. 完美数检测 **定义与解释:** 完美数(Perfect number)是指一个正整数,它等于除自身之外的所有正因子之和。例如,6 的因子为 1、2 和 3,而 1 + 2 + 3 = 6,所以 6 是一个完美数。 **实现代码解析:** ```cpp #include <iostream> using namespace std; void main() { int i, j, sum = 0, a[50], k = 0, t; for (i = 1; i <= 1000; i++) { sum = 0; for (j = 1; j < i; j++) { if (i % j == 0) { sum += j; a[k++] = j; } } t = k; if (sum == i) { cout << i << "->"; for (k = 0; k < t; k++) { cout << a[k]; if (k < t - 1) cout << ","; } cout << endl; } k = 0; } } ``` **核心逻辑:** - 对于每一个数 i,在 1 到 i-1 的范围内找到所有能整除 i 的数,并将它们累加起来。 - 如果累加的结果正好等于 i,那么 i 就是一个完美数。 - 输出完美数及其所有因子。 ### 3. 数列求和问题 **定义与解释:** 对于给定的 a 和 n,计算序列 `a + aa + aaa + ... + a...a (n 个 a)` 的值。例如,当 a = 2, n = 5 时,序列是 2 + 22 + 222 + 2222 + 22222。 **实现代码解析:** ```cpp #include <iostream> using namespace std; void main() { double a, sn = 0.0, sum = 0.0; int n, i; cout << "please input a number "; cin >> a; cout << "please input n number "; cin >> n; sn = a; sum = a; for (i = 2; i <= n; i++) { sum = sum * 10 + a; sn += sum; } cout << "Sn=" << sn << endl; } ``` **核心逻辑:** - 用户输入 a 和 n。 - 初始化 `sum` 为 a。 - 使用循环逐步构建每个项,并累加到 `sn` 中。 - 输出最终结果 `sn`。 ### 4. 球弹跳问题 **定义与解释:** 有一个球从 100 米的高度自由落下。每次落地后反跳回原高度的一半;再落下,求它在第 10 次落地时,共经过多少米?第 10 次反弹多高? **实现代码解析:** ```cpp #include <iostream> using namespace std; void main() { double h1 = 100, h2 = 100, sum = 0.0; int i; for (i = 1; i <= 10; i++) { sum += h2; h1 = h1 / 2.0; h2 = h1 * 2; } cout << "sum=" << sum << " " << "h1=" << h1 << endl; } ``` **核心逻辑:** - 初始化 `h1` 和 `h2` 为 100 米。 - 在每次循环中更新高度,并累加总路程。 - 输出经过的总路程以及第 10 次反弹的高度。 ### 5. 数列翻倍问题 **定义与解释:** 有 10 只兔子,每过一个月,每只兔子都会翻倍。求 10 个月后有多少只兔子。 **实现代码解析:** ```cpp #include <iostream> using namespace std; void main() { int number, i; number = 1; for (i = 10; i > 1; i--) { number = (number + 1) * 2; } cout << "number=" << number << endl; } ``` **核心逻辑:** - 初始化 `number` 为 1。 - 从 10 开始递减计数,每经过一个月,兔子数量翻倍。 - 输出 10 个月后的兔子总数。 通过以上分析,我们可以清晰地理解这些经典算法的定义、用途以及其实现方法。这些算法不仅是 C++ 编程中的基础练习,也是理解和掌握编程思想的重要途径。
- 粉丝: 3
- 资源: 13
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助