扫雷

#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;输出统计得到的当前位置周围*字符的个数。
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-02 15:39
希望奇迹发生的布莱克...:真的是 现在卷实习就是没苦硬吃
点赞 评论 收藏
分享
点赞 评论 收藏
分享
Gaynes:查看图片
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-01 17:13
想去,但是听说加班强度实在难崩,所以拒绝了,现在有点心梗对面hr感觉也是实习生,打电话的时候怪紧张的,但是感觉人很好嘞
水中水之下水道的鼠鼠:哥们这不先去体验一下,不行再跑呗,大不了混个实习经历(有更好的转正offer就当我没说)
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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