You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让摄魂怪数识别C程序先输出计数?输出格式调整求助

解决摄魂怪数输出顺序问题(先计数后列数)

问题核心

需要调整程序输出逻辑:先输出符合条件的摄魂怪数的计数,再列出所有数,格式为计数: 数1,数2,...,且仅使用if-else、循环、数组实现。

解决方案

核心思路是先收集所有符合条件的数,再统一输出,而非找到一个就输出一个。具体步骤:

  1. 定义足够大的数组存储符合条件的数(覆盖3-5位数的最大可能数量)
  2. 第一遍遍历范围,筛选出所有满足条件的数并存入数组,同时统计计数
  3. 遍历完成后,先输出计数,再遍历数组输出所有数,处理好逗号分隔的格式

修改后的完整代码

#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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 23:02:47