洛谷P2670 样例过不了,1AC


#include
using namespace std;

int n = 0 , m = 0;
int ans = 0;

int main()
{
    scanf("%d%d",&n,&m);
    char excel[n][m];
    for (int i = 0 ; i < n ; i++)
    {
        for (int j = 0 ; j < m ; j++)
        {
            scanf("%c",&excel[i][j]);
        }
    }
    
    for (int i = 0 ; i < n ; i++)
    {
        for (int j = 0 ; j < m ; j++)
        {
            if (excel[i][j] == '*')
            {
                printf("*");
                continue;
            }
            
            if (i-1 != -1)
            {
                if (excel[i-1][j] == '*') ans++;
            }
            if (i-1 != -1 && j-1 != -1)
            {
                if (excel[i-1][j-1] == '*') ans++;
            }
            if (j-1 != -1)
            {
                if (excel[i][j-1] == '*') ans++;
            }
            if (j-1 != -1 && i+1 != n)
            {
                if (excel[i+1][j-1] == '*') ans++;
            }
            if (i+1 != n)
            {
                if (excel[i+1][j] == '*') ans++;
            }
            if (i+1 != n && j+1 != m)
            {
                if (excel[i+1][j+1] == '*') ans++;
            }
            if (j+1 != m)
            {
                if (excel[i][j+1] == '*') ans++;
            }
            if (i-1 != -1 && j+1 != m)
            {
                if (excel[i-1][j+1] == '*') ans++;
            }
            
            printf("%d",ans);
            ans = 0;
        }
        printf("\n");
    }
    return 0;
}

#include<iostream>
using namespace std;
int main()
{
    char a[105][105];
    int b[105][105],n,m,i,j;//数组定义(二维)
    cin>>n>>m;//读入行、列
    for(i=1;i<105;i++)
        for(j=1;j<105;j++)
            b[i][j]=0;//给数组赋值为0
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
        {
            cin>>a[i][j];
            if(a[i][j]=='*')//判断:如果是地雷
            {
                b[i+1][j+1]++;
                b[i+1][j-1]++;
                b[i+1][j]++;
                b[i][j+1]++;
                b[i][j-1]++;
                b[i-1][j]++;
                b[i-1][j+1]++;
                b[i-1][j-1]++;//相邻的八个格子都+1                
            }
        }
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            if(a[i][j]=='*')
                cout<<"*";//如果是地雷(*) 原样输出
            else
                cout<<b[i][j];//否则输出数字
        }    
        cout<<endl;
    }
    return 0;
}

#include<bits/stdc++.h>
using namespace std;
bool a[105][105];
int main()
{
    memset(a,0,sizeof(a));
    int n,m;
    char tmp;
    cin>>n>>m; 
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++) 
        {
            cin>>tmp;
            if(tmp=='*') a[i][j]=1;
        }
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(a[i][j]==1) printf("*"); 
            else
            {
                printf("%d",a[i+1][j+1]+a[i+1][j-1]+a[i+1][j]+a[i][j+1]+a[i][j-1]+a[i-1][j+1]+a[i-1][j]+a[i-1][j-1]);
       
            }
        }
        printf("\n");
    }
    return 0;
}