扫雷题解

#include <iostream>

#include <cstdio>

using namespace std;

char a[110][110];  //根据雷区设定的数组大小

void fun(int n,int m)

{

    for(int i=1;i<=n;i++)   //以字符串的形式往二维数组里填充内容

        scanf("%s",a[i]+1); //a[i+1]空出左边的一列

    //右边和下边只需要把数组设置大,就会空出来了

    int dx[8]={-1,-1,-1,0,0,1,1,1};//方向数组,实现数据和控制分离

    int dy[8]={-1,0,1,-1,1,-1,0,1};

    for(int i=1;i<=n;i++)

    {

        for(int j=1;j<=m;j++)

        {

            if(a[i][j]=='*')

                cout<<'*';

            else

            {

                int sum=0;

                for(int o=0;o<8;o++)    //找周围雷的个数

                    if(a[i+dx[o]][j+dy[o]]=='*')

                        sum++;

                cout<<sum;

            }

        }

        cout<<endl;

    }

}

int main()

{

    int n,m;

    cin>>n>>m;

    fun(n,m);

    return 0;

}

备注:对于二维数组:a[0][0]不是地址,&a[0][0]才是地址,但a[0]是a[0][0]的地址,a[0]+1是a[0][1]的地址.

所以在输入的时候,若是输入a[i][j],就必须用取地址符。

这篇文章,是又一个故事的结束...
lazy's story is continuing.
原文地址:https://www.cnblogs.com/Hello-world-hello-lazy/p/13490751.html