C语言魔法师收集宝石 宝石编号从1到n,他只会收集能被4整除或者个位数字是7的宝石,用递归方式计算收集宝石编号之和。并且程序要用预处理指令决定是否展示收集宝石过程(比如是否找到符合条件的宝石编号)
时间: 2024-11-09 19:19:44 浏览: 7
在C语言中,设计一个“魔法师收集宝石”的程序,可以利用递归和条件判断来完成。首先,你可以定义一个函数`collectGems(int n, int current)`,其中`n`是总共有多少颗宝石,`current`表示当前正在检查的宝石编号。这个函数的主要逻辑会是这样的:
```c
#include <stdio.h>
// 预处理指令,用于控制是否显示收集过程
#define SHOW_PROCESS 0
// 检查宝石是否满足条件
int isMagicalGem(int gem) {
return (gem % 4 == 0 || gem % 10 == 7);
}
// 递归函数,计算并返回符合条件的宝石之和
long long collectGems(int n, int current) {
if (current > n) {
// 如果已超过范围,返回0表示未找到更多宝石
return 0;
}
if (SHOW_PROCESS && isMagicalGem(current)) {
printf("收集宝石 %d\n", current);
}
// 递归调用自身,包含当前宝石和跳过当前宝石后的宝石
return (isMagicalGem(current) ? current : 0) + collectGems(n, current + 1);
}
int main() {
int n; // 输入宝石总数
scanf("%d", &n);
long long total = collectGems(n, 1); // 开始收集
printf("总共收集的宝石之和是: %lld\n", total);
return 0;
}
```
在这个程序中,`#define SHOW_PROCESS 0`决定了是否在每次寻找符合条件的宝石时打印信息。如果想要看到收集过程,将该值设为1即可。
阅读全文