#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;
}