|
发表于 2021-10-28 11:40:18
|
显示全部楼层
- #include <stdio.h>
- #include <string.h>
- #define ROW 8
- #define COL 8
- int checkaround(int, int, int[][*]);
- int main(void)
- {
- int size;
- int array[ROW][COL] = {
- {1, 1, 0, 1, 1, 1},
- {1, 1, 0, 1, 1, 1},
- {0, 0, 0, 1, 1, 1},
- {0},
- {1, 1, 1, 1},
- {1, 1, 1, 1},
- {1, 0, 1, 1},
- {1, 1, 1, 1, 0, 0, 1},
- }; // 数组的初始化函数就不写了,直接用你例子
- //因为你的计数规则是与改变后的数组无关,所以要复制一个二维数组用于遍历
- int array2[ROW][COL];
- memcpy(array2, array, sizeof(array));
- //输入 size
- scanf("%d", &size);
- for (int i = 0; i < ROW; ++i)
- {
- for (int j = 0; j < COL; ++j)
- {
- if (checkaround(i, j, array2) >= size)
- array[i][j] = 0;
- printf("%d ", array[i][j]); //顺便打印结果,可以去掉
- }
- printf("\n"); //顺便打印结果,可以去掉
- }
- return 0;
- }
- // 检查 array2 第 row 行 col 列周围 1 的个数
- int checkaround(int row, int col, int array[][COL])
- {
- int count = 0;
- for (int x = -1; x < 2; ++x)
- {
- for (int y = -1; y < 2; ++y)
- {
- // 边界检查,是自身或出界都跳过
- if ((x == 0 && y == 0) || row + x < 0 || row + x >= ROW || col + y < 0 || col + y >= COL)
- continue;
- if (array[row + x][col + y] == 1)
- ++count;
- }
- }
- return count;
- }
复制代码 |
|