阿帕茶次 2024-01-02 11:33 采纳率: 51.7%
浏览 5

扫雷至表示周围雷个数

img

img


为什么只能输入3 3,后面的内容无法输入?这是为什么?第二个for循环里,我将i,j都各自加2,然后这样就不用判断上方区域是否在指定的范范围内,但是增加的这两行两列,是空白(系统任意给数字),这样没问题吧?

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2024-01-02 14:20
    关注

    【以下回答由 GPT 生成】

    问题分析:

    从代码的描述中可以得知,程序只接受输入的第一个数字,即3,而忽略了后面的3。这是因为代码中没有处理用户输入的代码,导致只能接受固定的输入。

    另外,在第二个for循环中,将i和j各自加2,可以在更新雷区数字时不需要判断周围方格是否在指定范围内,但这会导致新增加的行列没有被正确初始化,把这两个新添加行列初始化为0即可解决。

    解决方案:

    问题1:处理用户输入

    可以使用scanf函数来处理用户输入,读取用户输入的雷区大小,并存储到适当的变量中。

    修改后的代码如下:

    #include <stdio.h>
    
    int main() {
        int i, j;
        int minefield[5][5]; // 一个5x5的表示雷区的数组
        int size;
    
        // 接收雷区大小
        printf("请输入雷区的大小:");
        scanf("%dx%d", &size, &size);
    
        // 初始化雷区
        for (i = 0; i < size; i++) {
            for (j = 0; j < size; j++) {
                minefield[i][j] = 0;
            }
        }
    
        // 在雷区上随机布雷(这部分我这里没有显示出来)
    
        // 更新雷区的数字
        for (i = 0; i < size; i++) {
            for (j = 0; j < size; j++) {
                // 判断当前方格是否为雷
                if (minefield[i][j] == 9) {
                    // 周围8个方格的雷数加1
                    if (i > 0 && j > 0) {
                        minefield[i-1][j-1]++;
                    }
                    // ... 其他7个方向类似的更新
                }
            }
        }
    
        // 打印雷区的状态
        for (i = 0; i < size; i++) {
            for (j = 0; j < size; j++) {
                printf("%d ", minefield[i][j]);
            }
            printf("\n");
        }
    
        return 0;
    }
    

    问题2:新增行列的初始化

    在新增的两次循环中,需要将新增的行列初始化为0。

    修改后的代码如下:

    #include <stdio.h>
    
    int main() {
        int i, j;
        int minefield[7][7]; // 一个7x7的表示雷区的数组,新增2行2列
        int size = 5;
    
        // 初始化雷区和新增行列
        for (i = 0; i < size + 2; i++) {
            for (j = 0; j < size + 2; j++) {
                if (i < 2 || i > size + 1 || j < 2 || j > size + 1) {
                    minefield[i][j] = 0;
                } else {
                    minefield[i][j] = 9;
                }
            }
        }
    
        // 在雷区上随机布雷(这部分我这里没有显示出来)
    
        // 更新雷区的数字
        for (i = 2; i < size + 2; i++) {
            for (j = 2; j < size + 2; j++) {
                // 判断当前方格是否为雷
                if (minefield[i][j] == 9) {
                    // 周围8个方格的雷数加1
                    minefield[i-1][j-1]++;
                    minefield[i-1][j]++;
                    minefield[i-1][j+1]++;
                    minefield[i][j-1]++;
                    minefield[i][j+1]++;
                    minefield[i+1][j-1]++;
                    minefield[i+1][j]++;
                    minefield[i+1][j+1]++;
                }
            }
        }
    
        // 打印雷区的状态
        for (i = 2; i < size + 2; i++) {
            for (j = 2; j < size + 2; j++) {
                printf("%d ", minefield[i][j]);
            }
            printf("\n");
        }
    
        return 0;
    }
    

    请注意,修改后的代码假设雷区最大为7x7,并在初始化雷区和更新雷区数字时,处理新增的两行两列。

    这样就解决了问题中提出的两个问题。如果还有其他问题,请及时提出。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 1月2日

悬赏问题

  • ¥15 静电纺丝煅烧后如何得到柔性纤维
  • ¥15 (标签-react native|关键词-镜像源)
  • ¥100 照片生成3D人脸视频
  • ¥15 伪装视频时长问题修改MP4的时长问题,
  • ¥15 JETSON NANO
  • ¥15 VS开发qt时如何在paintgl函数中用pushbutton控制切换纹理
  • ¥20 关于 openpyxl 处理excel文件地问题
  • ¥15 MS中不知道高分子的构型怎么构建模型
  • ¥60 QQOP数据,什么是op数据号,怎么提取op数据!能不能大量提取(语言-c语言)
  • ¥15 matlab代码 关于微分方程和嵌套的分段函数。