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

C编程:从0到24按规则输出Hello、Red、Green、Blue

问题分析与修正方案

核心问题梳理

  1. 偶数判断逻辑颠倒:if (i % 2) 实际判断的是奇数(偶数取模2结果为0,条件不成立),应改为 if (i % 2 == 0)。
  2. 赋值替代比较:if (i = R[j]) 是把R[j]的值赋给循环变量i,直接破坏外层循环的遍历逻辑,这是导致无限循环的根本原因,必须改为比较运算符==。
  3. 冗余逻辑与无效参数:printf格式字符串无占位符,无需传入i;奇数判断的三层嵌套循环无需全部遍历,找到匹配项后即可终止判断。

修正后的代码(保留原数组思路)

#include <stdio.h>

int main ()
{
    int i, j;

    int R[] = {1,7,13,19}; 
    int G[] = {3,9,15,21}; 
    int B[] = {5,11,17,23};

    // 遍历0到24(原代码i<24仅到23,需包含24则改为i<=24)
    for (i = 0; i <= 24; i++)
    {
        // 处理偶数
        if (i % 2 == 0)
        {
            printf("Hello\n");
            continue; // 处理完直接进入下一轮循环
        }
        // 处理奇数
        int matched = 0;
        // 检查Red
        for (j = 0; j < 4; j++)
        {
            if (i == R[j]) 
            {
                printf("Red\n");
                matched = 1;
                break;
            }
        }
        if (matched) continue;
        // 检查Green
        for (j = 0; j < 4; j++)
        {
            if (i == G[j]) 
            {
                printf("Green\n");
                matched = 1;
                break;
            }
        }
        if (matched) continue;
        // 检查Blue
        for (j = 0; j < 4; j++)
        {
            if (i == B[j]) 
            {
                printf("Blue\n");
                break;
            }
        }
    }
    return 0;
}

更简洁的优化方案(利用数学规律)

观察奇数集合的规律:

  • Red:1,7,13,19 → (i - 1) % 6 == 0
  • Green:3,9,15,21 → (i - 3) % 6 == 0
  • Blue:5,11,17,23 → (i - 5) % 6 == 0

基于此可彻底去掉数组和嵌套循环,代码更高效:

#include <stdio.h>

int main ()
{
    for (int i = 0; i <= 24; i++)
    {
        if (i % 2 == 0)
        {
            printf("Hello\n");
        }
        else if ((i - 1) % 6 == 0)
        {
            printf("Red\n");
        }
        else if ((i - 3) % 6 == 0)
        {
            printf("Green\n");
        }
        else if ((i - 5) % 6 == 0)
        {
            printf("Blue\n");
        }
    }
    return 0;
}

关键说明

  • 原代码i < 24仅能遍历到23,若需包含24需修改为i <= 24。
  • 使用continue可避免多层嵌套判断,让逻辑更清晰。
  • 数学规律方案无需额外数组,执行效率更高且更易维护。

内容的提问来源于stack exchange,提问作者LeonidasEng

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 03:50:24