#54770: C語言


rumm2859@gmail.com (青)


#include <stdio.h>

int main() {

    宣告m為長、n為寬、a為暫存輸入、b為計數器、i與j為迴圈索引
    int m, n, a, b, i, j;
    
    宣告二維陣列s用來儲存圖案,大小最大為100x100
    int s[100][100];

    讀取圖案的長m與寬n
    scanf("%d %d", &m, &n);

    使用巢狀迴圈讀取原始圖案的數字
    for (i = 0; i < m; i++) {
        for (j = 0; j < n; j++) {
            
            將輸入的數字存入陣列中
            scanf("%d", &s[i][j]);
        }
    }

    處理每一列的著色邏輯
    for (i = 0; i < m; i++) {
        
        每一列開始前,將計數器b歸零,用來數遇到第幾個1
        b = 0;
        
        宣告p用來記錄上一個1的位置
        int p = -1;

        逐一檢查該列的每個數字
        for (j = 0; j < n; j++) {
            
            如果遇到數字1
            if (s[i][j] == 1) {
                
                增加計數器
                b++;

                如果這是成對中的第二個1(偶數個)
                if (b % 2 == 0) {
                    
                    將上一個1到目前這個1之間的所有0塗成1
                    for (int k = p + 1; k < j; k++) {
                        s[i][k] = 1;
                    }
                }
                
                更新上一個1的位置為目前位置j
                p = j;
            }
        }
    }

    輸出著色完成後的結果
    for (i = 0; i < m; i++) {
        for (j = 0; j < n; j++) {
            
            輸出數字並判斷是否需要空格
            printf("%d%s", s[i][j], (j == n - 1 ? "" : " "));
        }
        
        每一列換行
        printf("\n");
    }

    程式正常結束
    return 0;
}