Switch-biu 2023-03-29 15:38 采纳率: 90%
浏览 29
已结题

模拟, 暴力,蓝桥杯错误代码

#蓝桥杯扫雷题目
题目描述
在一个
n 行
m 列的方格图上有一些位置有地雷,另外一些位置为空。

请为每个空位置标一个整数,表示周围八个相邻的方格中有多少个地雷。

输入描述
输入的第一行包含两个整数

n,m。


2
2 行到第

+
1
n+1 行每行包含

m 个整数,相邻整数之间用一个空格分隔。如果对应的整数为
0
0,表示这一格没有地雷。如果对应的整数为
1
1,表示这一格有地雷。

其中,
1


,


100
1≤n,m≤100 分钟后还是在当天。

输出描述
输出

n 行,每行

m 个整数,相邻整数之间用空格分隔。

对于没有地雷的方格,输出这格周围的地雷数量。对于有地雷的方格,输出
9
9。

输入输出样例
示例 1
输入

3 4
0 1 0 0
1 0 1 0
0 0 1 0
copy
输出

2 9 2 1
9 4 9 2
1 3 9 2
copy
运行限制
最大运行时间:1s
最大运行内存: 128M

错误代码


```c++
#include<bits/stdc++.h>
using namespace std;
const int N=10000;
int a[N][N];
int sum[N][N]={0}; 
int main()
{
    int m,n;
    cin>>m>>n;
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
        {
            cin>>a[i][j];
        }
    }
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(a[i][j]==1)
            {
                a[i][j]=9;
            }
        }
    } 
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(a[i][j]!=9)
            {
                if(i-1>=0&&j-1>=0)
                {
                    if(a[i-1][j-1]==9)
                    {
                        sum[i][j]++;
                    }
                }
                if(i-1>=0)
                {
                    if(a[i-1][j]==9)
                    {
                        sum[i][j]++;
                    }
                }
                if(i-1>=0&&j+1<n)
                {
                    if(a[i-1][j+1]==9)
                    {
                        sum[i][j]++;
                    }
                }
                if(j-1>=0)
                {
                    if(a[i][j-1]==9)
                    {
                        sum[i][j]++;
                    }
                }
                if(j+1<n)
                {
                    if(a[i][j+1]==9)
                    {
                        sum[i][j]++; 
                    }
                }
                if(i+1<m&&j-1>=0)
                {
                    if(a[i+1][j-1]==9)
                    {
                        sum[i][j]++;
                    }
                }
                if(i+1<m)
                {
                    if(a[i+1][j]==9)
                    {
                        sum[i][j]++;
                    }
                }
                if(i+1<m&&j+1<n)
                {
                    if(a[i+1][j+1]==9)
                    {
                        sum[i][j]++;
                    }
                }
            }
        }
    }
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(a[i][j]!=9)
            {
                a[i][j]=sum[i][j];
            }
            cout<<a[i][j]<<" "; 
        }
        if(i!=m-1)
        {
            cout<<endl;
        }
    }
    return 0;
}


想知道哪里有问题,代码范例不通过

![img](
https://img-mid.csdnimg.cn/release/static/image/mid/ask/859325570086111.png "#left")
  • 写回答

2条回答 默认 最新

  • ksgpjhqf 2023-03-29 18:20
    关注

    数组开太大了,两个数组加起来接近800M

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月6日
  • 已采纳回答 3月29日
  • 创建了问题 3月29日

悬赏问题

  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题
  • ¥20 RL+GNN解决人员排班问题时梯度消失
  • ¥60 要数控稳压电源测试数据
  • ¥15 能帮我写下这个编程吗
  • ¥15 ikuai客户端l2tp协议链接报终止15信号和无法将p.p.p6转换为我的l2tp线路