如何让摄魂怪数识别C程序先输出计数?输出格式调整求助
解决摄魂怪数输出顺序问题(先计数后列数)
问题核心
需要调整程序输出逻辑:先输出符合条件的摄魂怪数的计数,再列出所有数,格式为计数: 数1,数2,...,且仅使用if-else、循环、数组实现。
解决方案
核心思路是先收集所有符合条件的数,再统一输出,而非找到一个就输出一个。具体步骤:
- 定义足够大的数组存储符合条件的数(覆盖3-5位数的最大可能数量)
- 第一遍遍历范围,筛选出所有满足条件的数并存入数组,同时统计计数
- 遍历完成后,先输出计数,再遍历数组输出所有数,处理好逗号分隔的格式
修改后的完整代码
#include <stdio.h> int main() { int n1, n2; scanf("%d %d", &n1, &n2); int count = 0; // 定义足够大的数组存储符合条件的数(3-5位数最多99900个,100000足够) int valid_nums[100000]; for (int i = n1; i <= n2; i++) { int digit = 0; int temp = i; // 计算数字位数 while (temp != 0) { temp /= 10; digit++; } // 筛选3-5位数 if (digit > 2 && digit < 6) { int sum = 0; int num = i; // 计算偶数位数字之和(从左数第2、4位,对应索引1、3) for (int j = digit - 1; j >= 0; j--) { int d = num % 10; num /= 10; // j是从右数的位置,转换为从左数的索引:digit-1-j if ((digit - 1 - j) % 2 == 1) { sum += d; } } // 判断摄魂怪数条件 if (sum > 8 && sum % 4 == 0) { valid_nums[count++] = i; } } } // 输出结果 printf("%d: ", count); for (int i = 0; i < count; i++) { if (i > 0) { printf(","); } printf("%d", valid_nums[i]); } printf("\n"); return 0; }
关键修改说明
- 数组存储结果:新增
valid_nums数组,将符合条件的数直接存入,而非即时输出 - 优化偶数位求和:无需将每个数字存入临时数组,直接通过取余和除法计算偶数位之和,减少内存占用
- 输出格式调整:先输出计数,再遍历数组,通过判断索引控制逗号的输出,避免末尾出现多余逗号
内容的提问来源于stack exchange,提问作者Atik
相关产品推荐
相关产品推荐

