求助 二维数组
假设有一个Land的二维数组,里面可随机输入1,再输入一个int “size”的变量如果数组中的某个元素为1,检测它周围的所有格子(考虑边界判断),如果这个元素周围的格子里有1的个数>size,则把这个元素初始化。
例见图片
{:5_109:} {:10_256:} {:10_254:} {:10_254:} {:10_279:} {:10_256:} {:5_95:} {:10_254:} let me think one think {:10_297:} 我想想 {:10_277:} {:10_277:} 没看懂 本帖最后由 Stubborn 于 2021-10-27 17:04 编辑
第零点: 8 * 8 的格子,只有0~63的索引,通过坐标是可以计算出来的。就是说,计算的范围会在0~63内,超出这个结果为边界。(另也可以直接判断值-1< a < 7 | -1< b < 7 )
第一点:land--> 第a行,第b列,最终的索引应该是 a * 8 + c ,如果这个值不在0~63即代表边界
第二点:land ->周围的8个点是可计算的,如何计算,自己参考坐标的知识点,计算后的点是否到达边界,参考第第零点
第三点:拿到land 周围8个点的左边,进行计算,可以得到结果
还没学到数组{:10_249:} {:10_285:} #include <stdio.h>
#include <string.h>
#define ROW 8
#define COL 8
int checkaround(int, int, int[][*]);
int main(void)
{
int size;
int array = {
{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;
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 = 0;
printf("%d ", array); //顺便打印结果,可以去掉
}
printf("\n"); //顺便打印结果,可以去掉
}
return 0;
}
// 检查 array2 第 row 行 col 列周围 1 的个数
int checkaround(int row, int col, int array[])
{
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 == 1)
++count;
}
}
return count;
}
{:10_277:} {:5_103:}
页:
[1]
2