千秋若离 发表于 2021-10-26 15:47:39

求助 二维数组

假设有一个Land的二维数组,里面可随机输入1,再输入一个int “size”的变量
如果数组中的某个元素为1,检测它周围的所有格子(考虑边界判断),如果这个元素周围的格子里有1的个数>size,则把这个元素初始化。
例见图片

jhq999 发表于 2021-10-26 16:41:53

{:5_109:}

yangyiheng 发表于 2021-10-26 19:39:58

{:10_256:}

千秋若离 发表于 2021-10-27 00:07:39

{:10_254:}

小程奋发图强 发表于 2021-10-27 08:38:37

{:10_254:}

阿萨德按时 发表于 2021-10-27 08:38:56

{:10_279:}

1molHF 发表于 2021-10-27 10:22:53

{:10_256:}

hornwong 发表于 2021-10-27 10:42:51

{:5_95:}

tianlai7266 发表于 2021-10-27 10:45:02

{:10_254:}

番杰 发表于 2021-10-27 11:55:53

let me think one think {:10_297:}

嘉岳呀 发表于 2021-10-27 12:02:05

我想想

笔名为小明 发表于 2021-10-27 12:13:43

{:10_277:}

傻眼貓咪 发表于 2021-10-27 13:02:56

{:10_277:}

sunyt 发表于 2021-10-27 14:20:34

没看懂

Stubborn 发表于 2021-10-27 17:00:43

本帖最后由 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个点的左边,进行计算,可以得到结果


myqf123 发表于 2021-10-28 09:37:36

还没学到数组{:10_249:}

myqf123 发表于 2021-10-28 09:38:16

{:10_285:}

hrpzcf 发表于 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 = {
      {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;
}

Muzi_xy 发表于 2021-10-28 15:53:22

{:10_277:}

han125416866 发表于 2021-10-31 16:54:53

{:5_103:}
页: [1] 2
查看完整版本: 求助 二维数组