C语言实现经典算法:兔子问题与质数判断

需积分: 9 0 下载量 58 浏览量 更新于2024-09-27 收藏 22KB TXT 举报
"C语言经典算法100例" 在编程领域,C语言因其高效、灵活和广泛的应用而备受青睐。本资源聚焦于C语言的经典算法,通过实例讲解如何解决实际问题。其中,兔子问题(Fibonacci数列)是著名的古典问题之一,它涉及到递归和动态规划的概念。 斐波那契数列是这样一个数列:0, 1, 1, 2, 3, 5, 8, 13, 21...,每个数字是前两个数字的和。题目中提到的兔子问题就是根据斐波那契数列来模拟兔子繁殖的情况。初始时有1对兔子,从第3个月开始每对兔子每月生一对新兔子。我们可以用循环结构来实现这个算法,如示例代码所示: ```c int main() { long f1, f2; int i; f1 = f2 = 1; for (i = 1; i <= 20; i++) { printf("%12ld%12ld", f1, f2); if (i % 2 == 0) printf("\n"); // 每隔一行打印 f1 = f1 + f2; // 更新前一个数 f2 = f1 + f2; // 更新当前数 } return 0; } ``` 这段代码首先初始化了两对兔子的数量(f1 和 f2),然后通过for循环逐月计算并打印兔子总数。每两行打印一次结果,使得输出更易读。 接下来,另一个问题涉及到寻找素数。代码中使用了平方根和遍历的方法来找出101到200之间的所有素数: ```c #include <math.h> int main() { int m, i, k, h = 0, leap = 1; printf("\n"); for (m = 101; m <= 200; m++) { k = sqrt(m + 1); for (i = 2; i <= k; i++) if (m % i == 0) { leap = 0; break; } if (leap) { printf("%-4d", m); h++; if (h % 10 == 0) printf("\n"); } leap = 1; } printf("\nThe total is %d", h); } ``` 这段程序通过检查每个数是否能被2到其平方根之间的任何数整除来判断是否为素数。如果不能被整除,则该数是素数,打印出来并累加计数。 最后,我们有一个寻找特定模式的数字的问题,即“水仙花数”。水仙花数是指一个三位数,其各位数字的立方和等于该数本身。例如,153是一个水仙花数,因为1^3 + 5^3 + 3^3 = 153。要找出100到999之间的所有水仙花数,可以使用以下代码: ```c int main() { int i, j, k, n; printf("Waterflower numbers are:"); for (i = 100; i <= 999; i++) { n = i; j = (n / 100) % 10; k = (n / 10) % 10; n %= 10; if (j * j * j + k * k * k + n * n * n == i) printf("%d ", i); } return 0; } ``` 这段代码通过逐个提取三位数的每一位,计算立方和,然后与原数比较,找到符合条件的水仙花数。 这些例子展示了C语言在解决实际问题中的应用,包括递归序列、素数检测和模式查找等算法。通过学习和理解这些经典算法,开发者可以提高自己的编程技能,为解决更复杂的问题打下坚实的基础。