扫雷

#include<iostream>

#include<cstring>

using namespace std;

int main()

{

int n,m;

cin>>n>>m;

char a[105][105];

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

{

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

{

cin>>a[i][j];

}

}

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

{

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

{

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

{cout<<a[i][j];

continue;

}

int sum=0;

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

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

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

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

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

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

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

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

cout<<sum;

}

cout<<endl;

}

return 0;

}

for(int i = 1; i <= n; i++)
{
    for(int j = 1; j <= m; j++)
    {
        if (a[i][j] == '*')
        {
            cout << a[i][j];
            continue;
        }
        int sum = 0;
        sum += (a[i - 1][j - 1] == '*');
        sum += (a[i - 1][j] == '*');
        sum += (a[i - 1][j + 1] == '*');
        sum += (a[i + 1][j - 1] == '*');
        sum += (a[i + 1][j] == '*');
        sum += (a[i + 1][j + 1] == '*');
        sum += (a[i][j + 1] == '*');
        sum += (a[i][j - 1] == '*');
        cout << sum;
    }
    cout << endl;
}

  • 又是一组嵌套的for循环,用于遍历整个二维字符数组a,外层循环按行遍历(从第 1 行到第n行),内层循环按列遍历(从第 1 列到第m列)。
  • 在循环体内部,首先有一个if判断语句:if (a[i][j] == '*'):判断当前位置(i行j列)的字符是否为*,如果是*,则直接通过cout << a[i][j];输出该字符,然后使用continue语句跳过本次内层循环后面的代码,进入下一次内层循环(也就是直接处理下一个位置的字符)。
  • 如果当前位置字符不是*,则执行以下操作:int sum = 0;:定义一个整型变量sum,用于统计当前位置周围(上下左右以及斜对角方向)字符为*的个数。接下来的一系列语句:sum += (a[i - 1][j - 1] == '*');等:通过条件判断语句(a[某个位置] == '*')来判断当前位置周围的 8 个相邻位置(在二维数组边界范围内的有效相邻位置)的字符是否为*,如果是,则将sum的值加 1。这里巧妙地利用了 C++ 中布尔值与整型的转换关系,当条件判断为true(即字符是*)时,相当于将 1 加到sum上,判断为false(字符不是*)时,相当于加 0。最后通过cout << sum;输出统计得到的当前位置周围*字符的个数。
全部评论

相关推荐

不愿透露姓名的神秘牛友
06-29 17:30
找实习找着找着就要进入7月了,马上秋招也要开始了,找实习还有意义吗?
绝迹的星:有面就面, 没面上就当日薪4位数大佬免费培训, 面上了再考虑要不要实习
点赞 评论 收藏
分享
湫湫湫不会java:先投着吧,大概率找不到实习,没实习的时候再加个项目,然后把个人评价和荣誉奖项删了,赶紧成为八股战神吧,没实习没学历,秋招机会估计不多,把握机会。或者说秋招时间去冲实习,春招冲offer,但是压力会比较大
点赞 评论 收藏
分享
07-02 18:09
门头沟学院 Java
苍穹外卖和谷粒商城这俩是不是烂大街了,还能做吗?
想去重庆的鸽子在吐槽:你不如把这俩做完自己搞明白再优化点再来问 何必贩卖焦虑
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务