解题思路:
这个题的关键在于弄懂题目,知道题目问的是啥,其实翻译一遍可知道,该题目就是根据扫雷游戏的规则,给定最后的雷和安全区位置,填充信息场。 思路呢? 首先确定好输入,我弄了两个数组,都是存雷的信息,一个填充信息的时候计算周围八个格雷的个数用,另一个输出用。
关键点: 计算周围八个格雷的个数
遍历一遍b数组,如果不是雷的地方就要填充,是雷就原样输出,填充周围八个格,有几个雷就填充几。
怎么统一操作都是遍历周围八个格呢? 那就是在存的时候给定信息的外部填充一圈安全的字符,也就是'.'
这样后面的操作就统一了。 也就是二维数组的长度,要比他给的行列多出两行两列。
注意事项:
思路明白之后,注意事项就是别越界。 还有最后的输出格式,之间没有空格。
参考代码:
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
//输入
int row, col;
int times = 0;
while (cin>>row>>col && row!=0 && col!=0)
{
times++;
char a[row+2][col+2];
char b[row+2][col+2]; //多出两行两列,填充。
memset(a,'.',sizeof(a));
memset(b,'.',sizeof(b));
for (int i=1; i<=row; i++)
{
for (int j=1; j<=col; j++)
{
cin >> a[i][j];
b[i][j] = a[i][j];
}
}
//遍历一遍b数组,如果不是雷的地方就要填充,是雷就原样输出,填充是周围8个格,有几个雷就填充几
cout << "Field #" << times << ":" << endl;
for (int i=1; i<=row; i++)
{
for (int j=1; j<=col; j++)
{
if (b[i][j]!='*')
{
int mine_num = 0;
//遍历周围的八个格
for (int m=i-1; m<=i+1; m++)
{
for (int n=j-1; n<=j+1; n++)
{
if (b[m][n]=='*')
{
mine_num++;
}
}
//cout << mine_num << endl;
}
a[i][j] = mine_num + '0';
}
}
}
for (int i=1; i<=row; i++)
{
for (int j=1; j<=col; j++)
cout << a[i][j];
cout << endl;
}
cout << endl;
}
return 0;
}
0.0分
0 人评分
点我有惊喜!你懂得!浏览:4145 |
C二级辅导-计负均正 (C语言代码)浏览:698 |
简单的a+b (C语言代码)浏览:594 |
母牛的故事 (C语言代码)浏览:478 |
字符串比较 (C语言代码)答案错误????浏览:641 |
WU-输入输出格式练习 (C++代码)浏览:1133 |
C语言训练-亲密数 (C语言代码)浏览:697 |
数列排序 (C语言代码)浏览:674 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:631 |
C语言训练-排序问题<1> (C语言代码)浏览:369 |