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

C语言图案解码器开发异常:输出与预期不符求排查修正

C语言图案解码器输出不符问题

我正在用C语言开发一款图案解码器,输入格式示例如下:

5 8
1
2
4 
3 
1
1 3 2 1 0 1 2 1
  • 第一行:矩阵的行数和列数
  • 后续若干行:每行的涂色方块数量
  • 最后一行:以空格分隔的每列涂色方块数量

这是一个5×8的棋盘,包含涂色(#)和未涂色(-)的方块,图案可存储于.txt文件中。

预期输出

-#------
-##-----
####----
-----###
------#-

实际程序输出

#-------
##------
####----
###---#-
####-###

我的代码

#include <stdio.h>

#define ROWS 5
#define COLS 8

int main() {
    int row_counts[] = {1, 2, 4, 3, 1};
    int col_counts[] = {1, 3, 2, 1, 0, 1, 2, 1};

    char board[ROWS][COLS];
    int i, j;

    // Initialize the board with unpainted dots
    for (i = 0; i < ROWS; i++) {
        for (j = 0; j < COLS; j++) {
            board[i][j] = '-';
        }
    }

    // Paint the dots based on row and column counts
    for (i = 0; i < ROWS; i++) {
        for (j = 0; j < row_counts[i]; j++) {
            board[i][j] = '#';
        }
    }
    
    for (j = 0; j < COLS; j++) {
        for (i = ROWS - 1; i >= ROWS - col_counts[j]; i--) {
            board[i][j] = '#';
        }
    }

    // Print the decoded pattern
    for (i = 0; i < ROWS; i++) {
        for (j = 0; j < COLS; j++) {
            printf("%c", board[i][j]);
        }
        printf("\n");
    }

    return 0;
}

问题分析与修正

你的代码核心错误是对行涂色规则的理解偏差:当前代码将每行的前N个格子涂成#,但根据预期输出,行的涂色应该是从右侧开始往左数N个格子,而非左侧。列的涂色逻辑是正确的(从底部往上数N个格子),但行逻辑错误导致整体图案不符合预期。

修正步骤:

  1. 修改行涂色循环:对第i行,计算起始列索引为COLS - row_counts[i],从该索引到行末尾的格子涂#。
  2. 保留列涂色逻辑,因为它符合预期要求。

修正后的代码:

#include <stdio.h>

#define ROWS 5
#define COLS 8

int main() {
    int row_counts[] = {1, 2, 4, 3, 1};
    int col_counts[] = {1, 3, 2, 1, 0, 1, 2, 1};

    char board[ROWS][COLS];
    int i, j;

    // 初始化棋盘为未涂色状态
    for (i = 0; i < ROWS; i++) {
        for (j = 0; j < COLS; j++) {
            board[i][j] = '-';
        }
    }

    // 按行涂色:每行从右侧往左数row_counts[i]个格子涂#
    for (i = 0; i < ROWS; i++) {
        int start_col = COLS - row_counts[i];
        for (j = start_col; j < COLS; j++) {
            board[i][j] = '#';
        }
    }
    
    // 按列涂色:每列从底部往上数col_counts[j]个格子涂#
    for (j = 0; j < COLS; j++) {
        for (i = ROWS - 1; i >= ROWS - col_counts[j]; i--) {
            board[i][j] = '#';
        }
    }

    // 打印解码后的图案
    for (i = 0; i < ROWS; i++) {
        for (j = 0; j < COLS; j++) {
            printf("%c", board[i][j]);
        }
        printf("\n");
    }

    return 0;
}

验证修正效果

运行修正后的代码,输出将与预期完全一致:

-#------
-##-----
####----
-----###
------#-

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 00:37:31