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个格子),但行逻辑错误导致整体图案不符合预期。
修正步骤:
- 修改行涂色循环:对第i行,计算起始列索引为
COLS - row_counts[i],从该索引到行末尾的格子涂#。 - 保留列涂色逻辑,因为它符合预期要求。
修正后的代码:
#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
相关产品推荐
相关产品推荐

