1 回文数
📖 理论介绍
回文数是指正读反读都一样的数字。
例如:12321是回文数,从左向右读和从右向左读都是12321。
回文数在字符串处理和算法题中经常出现,判断一个数是否为回文数是常见的编程练习。
判断回文数的方法通常是将数字反转,然后比较反转后的数字是否与原数字相等。
💻 示例代码
#include<stdio.h> int isPalindrome(int n) { int original = n; int reversed = 0; while(n > 0) { reversed = ______________; n /= 10; } return ______________; } int main() { printf("1000-2000之间的回文数有:\n"); for(int i = 1000; i <= 2000; i++) { if(isPalindrome(i)) { printf("%d ", i); } } return 0; }
2 最大公约数和最小公倍数
📖 理论介绍
最大公约数(GCD)是指两个或多个整数共有约数中最大的一个。
最小公倍数(LCM)是指两个或多个整数公有的倍数中最小的一个。
计算最大公约数的常用方法是欧几里得算法(辗转相除法)。
最大公约数和最小公倍数之间的关系是:两数的乘积等于它们的最大公约数与最小公倍数的乘积。
💻 示例代码
#include<stdio.h> // 计算最大公约数 int gcd(int a, int b) { while(b != 0) { int temp = b; b = ______________; ______________; } return a; } // 计算最小公倍数 int lcm(int a, int b) { return ______________; } int main() { int a = 48, b = 18; printf("数字 %d 和 %d 的最大公约数是: %d\n", a, b, gcd(a, b)); printf("数字 %d 和 %d 的最小公倍数是: %d\n", a, b, lcm(a, b)); return 0; }
3 等差数列
�哈基米 理论介绍
等差数列是指从第二项起,每一项与它的前一项的差等于同一个常数的数列。
这个常数称为公差,通常用字母d表示。
等差数列的通项公式为:aₙ = a₁ + (n-1)d
前n项和公式为:Sₙ = n/2 × [2a₁ + (n-1)d] 或 Sₙ = n/2 × (a₁ + aₙ)
💻 示例代码
#include<stdio.h> void as(int a1, int d, int n) { printf("等差数列前%d项:\n", n); int sum = 0; for(int极速> i = 0; i < n; i++) { int term = ______________; printf("%d ", term); sum += term; } printf("\n前%d项和: %d\n", n, ______________); } int main() { as(2, 3, 10); // 首项2,公差3,前10项 return 0; }
4 等比数列
📖 理论介绍
等比数列是指从第二项极速起,每一项与它的前一项的比值等于同一个常数的数列。
这个常数称为公比,通常用字母q表示。极速p>
等比数列的通项公式为:aₙ = a₁ × q⁽ⁿ⁻¹⁾
前n项和公式为:Sₙ = a₁ × (1 - qⁿ) / (1 - q) (q ≠ 1)
💻 示例代码
#include<stdio.h> #include<math.h> void gs(int a1, int q, int n) { printf("等比数列前%d项:\n", n); int sum = 0; for(int i = 0; i < n; i++) { int term = ______________; printf("%d ", term); sum += term; } printf("\n前%d项和: %d\n", n, sum); } int main() { ______________; // 首项2,公比3,前5项 return 0; }
5 特殊数列求和
📖 理论介绍
特殊数列求和是编程中常见的问题,包括计算特定模式的数列之和。
常见的特殊数列求和包括:
1. 1² + 2² + 3² + ... + n²
2. 1³ + 2³ + 3³ + ... + n³极速p>
3. 1×2 + 2×3 + 3×4 + ... + n(n+1)
4. 1/1! + 1/2! + 1/3! + ... + 1/n!
💻 示例代码
#include<stdio.h> int main() { int n = 5; int sum1 = 0, sum2 = 0, sum3 = 0; float sum4 = 0; int factorial = 1; // 计算平方和、立方和、n(n+1)和、阶乘倒数和的 for(int i = 1; i <= n; i++) { sum1+=______________; // 平方和 sum2 += ______________; // 立方和 sum3 += ______________; // n(n+1)和 ______________; // 计算阶乘 sum4 += 1.0 / factorial; // 阶乘和 } printf("1²+2²+...+%d² = %d\n", n, sum1); printf("1³+2³+...+%d³ = %d\n", n, sum2); printf("1×2+2×3+...+%d×%d = %d\n", n, n+1, sum3); printf("1/1!+1/2!+...+1/%d! = %.4f\n", n, sum4); return 0; }
6 同构数
📖 理论介绍
同构数是指一个数的平方的末尾部分等于这个数本身。
例如:
5² = 25,末尾是5,所以5是同构数
25² = 625,末尾是25,所以25是同构数
76² = 5776,末尾是76,所以76是同构数
本程序要求找出1~1000之间的所有同构数。
💻 填空代码
#include<stdio.h> int main() { int n, square; // 查找1~1000之间的所有同构数 for(n = 1; n <= 1000; n++) { square = n * n; // 判断是否为同构数 if(______1______) { // 个位数同构数判断 printf("%d ", n); } else if(______2______) { // 两位数同构数判断 printf("%d ", n); } else if(______3______) { // 三位数同构数判断 printf("%d ", n); } } return 0; } /* 拓展:判断同构数的通用函数 */ int isAutomorphic(int num) { int square = num * num; int temp = num; int divisor = ______4______; // 计算除数 while(temp > 0) { divisor *= 10; temp /= 10; } return (square ______5______ divisor) == num; // 返回判断结果 }
7 亲和数
📖 理论介绍
亲和数是指两个数,其中每个数的真因数之和等于另一个数。
例如:220和284就是亲和数
220的真因数:1, 2, 4, 5, 10, 11, 20, 22, 44, 55, 110,和为284
284的真因数:1, 2, 4, 71, 142,和为220
本程序要求找出指定范围内的所有亲和数对。
💻 填空代码
#include<stdio.h> // 计算一个数的真因数之和 int sumOfProperDivisors(int num) { int sum = ______1______; // 初始化和 for(int i = 1; i < num; i++) { if(num % i == 0) { sum ______2______ i; // 累加真因数 } } return sum; } int main() { int start, end; printf("请输入查找范围(起始和结束数):"); scanf("%d %d", &start, &end); printf("亲和数对:\n"); for(int num1 = start; num1 <= end; num1++) { int sum1 = sumOfProperDivisors(num1); // 检查是否为亲和数对 if(sum1 > num1 && sum1 <= end) { int sum2 = sumOfProperDivisors(______3______); // 计算sum1的真因数和 if(______4______) { // 判断是否为亲和数对 printf("(%d, %d)\n", num1, sum1); } } } return 0; } /* 拓展:优化版本的亲和数查找 */ void findAmicablePairs(int start, int end) { int sumArray[end + 1]; // 预计算每个数的真因数和 for(int i = start; i <= end; i++) { sumArray[i] = sumOfProperDivisors(i); } // 查找亲和数对 for(int i = start; i <= end; i++) { int j = sumArray[i]; if(j > i && j <= end && sumArray[j] ______5______ i) { printf("(%d, %d)\n", i, j); } } }