[2015年NOIP普及组] 扫雷游戏

[2015年NOIP普及组] 扫雷游戏
思路:现在给出n行m列的雷区中的地雷分布,要求计算出每个非地雷格周围的地雷格数。要开一个字符型的二维数组,输入,然后开计数器,找雷,记录,输出。

分析:一个格子的周围格子包括其上、下、左、右、左上、右上、左下、右下八个方向上与之直接相邻的格子,搜索时要都考虑到。

代码如下:

#include<iostream>

#include<cstdio>

using namespace std;

int main()

{

      char a[110][110]={0};//建立一个二维数组当雷区,赋初值

      int n,m;

      cin>>n>>m;//输入行、列

      for(int i=1;i<=n;i++)//描述了雷区中的地雷分布情况

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

               cin>>a[i][k];

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

      {

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

           {

                 if(a[i][k]!='*')//如果这不是地雷

                 {

                      int sum=0;//计数器,记录地雷个数

            //开始四面八方扫雷

                      if(a[i-1][k-1]=='*') sum++;

                      if(a[i-1][k]=='*') sum++;

                      if(a[i-1][k+1]=='*') sum++;

                      if(a[i][k-1]=='*') sum++;

                      if(a[i][k+1]=='*') sum++;

                      if(a[i+1][k-1]=='*') sum++;

                      if(a[i+1][k]=='*') sum++;

                      if(a[i+1][k+1]=='*') sum++;

                      cout<<sum;//输出a[i][k]位置的地雷个数}

                  else//是地雷,直接输出

                  cout<<"*";

           }

           cout<<endl;//一行结束,换行

      }

      return 0;

}

posted @ 2022-08-13 10:45  shanyingrui  阅读(163)  评论(0编辑  收藏  举报