1.首次使用cin,cout。使用cin时不能再继续直接在字符串中添加字符,需要用到insert(),而且只能添加字符串;
2.判断边界的函数,解决了数组下标越界的问题;3.cin、cout总结“http://www.newsmth.net/pc/pccon.php?id=10002714&nid=359771”
4.自己写测试数据,用自己的测试数据调试程序。
以下是源代码
#include <stdio.h>
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int n,i,j,k,l,m;//循环变量
int num1[8]= {-1,-1,-1,0,0,1,1,1};//便于使用循环历遍周围的八个数
int num2[8]= {-1,0,1,-1,1,-1,0,1};
int count[10][10];//记录周围雷的个数
char point[10][10];//记录雷和非雷的位置
string a[22];//字符串数组
bool check(int a, int b )//判断是不是在边界上
{
if(a>=1 && a<=n && b>=0 && b<n )
return true;
else return false;
}
int main()
{
memset(count,0,sizeof(count));
memset(point,'.',sizeof(point));
scanf("%d",&n);
for( i = 1 ; i <= 2*n ; i++)
{
cin >> a[i] ;
}
for( i = n+1 ; i < 2*n+1 ; i++ )
{
for( j = 0 ; j < n ; j++ )
{
if( a[i][j] == 'x' && a[i-n][j] == '.')
{
for( k = 0 ; k < 8 ; k++ )
{
if( check(i - n + num1[k],j + num2[k]))//判断是不是在边界上
{
if( a[i - n + num1[k]] [j + num2[k]] == '*')
{
count[i-n-1][j] += 1;
}
}
}
}
else if( a[i][j] == 'x' && a[i-n][j] == '*')//扫中雷
{
for(l=1;l<=n;l++)
for(m=0;m<=n;m++)
if(a[l][m]=='*')
point[l-1][m]='*';
}
}
}
for( i=0 ; i < n ; i++ )
{
for( j=0 ; j < n ; j++ )
{
if( a[n+1+i][j] == 'x' && a[1+i][j] != '*')//扫中雷
printf( "%d" , count[i][j] );
else
printf( "%c" , point[i][j]);
}
printf("\n");
}
return 0;
}
按照题目的要求 测试数据有以下两种:
第一种:扫中雷,所有有雷的位置出现*
9
.........
**.*.....
....*....
....*....
.....*...
.........
.........
.*.......
.**.*....
....xxxxx
...xxxxxx
xxxx.xxxx
xxxx.xxxx
xxxxx.xxx
xxxxxxxxx
xxxxxxxxx
x.xxxxxxx
.....xxxx
第二种:题目中给的输入输出
9
.........
**.*.....
....*....
....*....
.....*...
.........
.........
.*.......
.**.*....
....xxxxx
....xxxxx
xxxx.xxxx
xxxx.xxxx
xxxxx.xxx
xxxxxxxxx
xxxxxxxxx
x.xxxxxxx
.....xxxx