本关任务:通过函数实现打印3000以内的全部亲密数。
为了完成本关任务,你需要掌握:
基本原理:for
循环是一种常用的循环结构,它允许您指定一个初始化表达式、一个循环条件和一个更新表达式。语法格式为for(初始化表达式; 循环条件; 更新表达式)
。初始化表达式在循环开始时执行一次,用于初始化循环变量。循环条件在每次循环迭代开始时进行检查,如果为真,则执行循环体中的代码。更新表达式在每次循环体执行完后执行,用于更新循环变量。
示例代码
#include <stdio.h>
int main() {
// 打印1到10的数字
for (int i = 1; i <= 10; i++) {
printf("%d ", i);
}
printf("\n");
return 0;
}
基本原理:while
循环在循环开始时检查循环条件。只要条件为真,就会执行循环体中的代码。语法格式为while(循环条件)
。循环条件是一个表达式,它返回一个布尔值(真或假)。在循环体中,通常需要包含一些能够改变循环条件的语句,否则可能会导致无限循环。
示例代码
#include <stdio.h>
int main() {
int i = 1;
while (i <= 10) {
printf("%d ", i);
i++;
}
printf("\n");
return 0;
}
基本原理:break
语句用于立即跳出当前循环(for
、while
、do - while
)或switch
语句。当程序执行到break
语句时,循环或switch
语句会立即终止,程序控制流将跳转到循环或switch
语句后的下一条语句。
示例代码(在循环中使用 break)
#include <stdio.h>
int main() {
for (int i = 1; i <= 10; i++) {
if (i == 5) {
break;
}
printf("%d ", i);
}
printf("\n");
return 0;
}
基本原理:continue
语句用于跳过当前循环迭代的剩余部分,直接开始下一次循环迭代。当程序执行到continue
语句时,循环体中continue
语句之后的代码将不会被执行,而是直接跳转到循环的更新表达式(对于for
循环)或循环条件检查(对于while
和do - while
循环)。
示例代码(在循环中使用 continue)
#include <stdio.h>
int main() {
for (int i = 1; i <= 10; i++) {
if (i == 5) {
continue;
}
printf("%d ", i);
}
printf("\n");
return 0;
}
二、亲密数的概念 1. 定义 亲密数是针对两个不同的自然数而言的一种特殊关系描述。具体来说,对于自然数 A 和 B,假如整数 A 的所有因子(这里的因子包含 1,但不包含 A 本身)相加所得的和恰好等于 B;同时,整数 B 的所有因子(同样包含 1,不包含 B 本身)相加的和又等于 A,那么我们就把这两个整数 A 和 B 称作亲密数。 2. 举例说明 我们以数字 220 和 284 为例来直观理解亲密数的定义:
这两个数正好满足上述亲密数定义中 A 的因子和等于 B ,B 的因子和等于 A 的这种相互关系,所以 220 和 284 就是一对亲密数。 3. 历史背景(延伸内容) 亲密数的概念可以追溯到古代数学。古希腊数学家毕达哥拉斯及其学派对于数的性质有着深入的研究,他们对数之间的各种关系很感兴趣,亲密数就是其中一种有趣的关系发现。这种数的关系在当时的数学研究以及哲学思考中都有一定的意义,因为古希腊人认为数具有神秘的性质,像亲密数这样的关系可能被用于解释自然现象或者哲学理念等诸多方面。
三、判断亲密数的方法 判断两个数是否为亲密数,通常可以按照以下步骤来进行: 1. 计算数 A 的各因子,并求其和存于 B
2. 计算 B 的各因子,并求其和存于 sum
3. 比较 sum 和 A 是否相等
根据提示在右侧编辑器Begin--End之间的区域内补充必要的代码。
平台会对你编写的代码进行测试:
预期输出:
220和284是一组亲密数
预期输出:
1184和1210是一组亲密数
预期输出:
2620和2924是一组亲密数
开始你的任务吧,祝你成功!
#include <stdio.h>
#define N 3000
int sum_of_factors(int num) {
int sum = 0;
for (int i = 1; i < num; i++) {
if (num % i == 0) {
sum += i;
}
}
return sum;
}
int is(int i) {
int j, n, sum1, sum2;
//请在此添加代码
/*********Begin*********/
sum1 = sum_of_factors(i);
sum2 = sum_of_factors(sum1);
/********* End *********/
if (sum2 == i && i < sum1)
return sum1;
else
return 0;
}
int main() {
int i, j;
//请在此添加代码
/*********Begin*********/
for (i = 1; i <= N; i++) {
j = is(i);
if (j > 0) {
/********* End *********/
printf("%d和%d是一组亲密数\n", i, j);
}
}
}