扫雷游戏是一款十分经典的单机小游戏。它的精髓在于,通过已翻开格子所提示的周围格地雷数,来判断未翻开格子里是否是地雷。
现在给出 nn 行 mm 列的雷区中的地雷分布,要求计算出每个非地雷格的周围格地雷数。
注:每个格子周围格有八个:上、下、左、右、左上、右上、左下、右下。
输入格式
第一行包含两个整数 nn 和 mm,分别表示雷区的行数和列数。1 le n le 100, 1 le m le 1001≤n≤100,1≤m≤100。
接下来 nn 行,每行 mm 个字符,'*'表示相应格子中是地雷,'?'表示相应格子中无地雷。字符之间无任何分隔符。
输出格式
nn 行,每行 mm 个字符,描述整个雷区。若相应格中是地雷,则用'*'表示,否则用相应的周围格地雷数表示。字符之间无任何分隔符。
Sample Input
3 3 *?? ??? ?*?
Sample Output
*10 221 1*1
新手,写的不好,请见谅
代码如下
#includeusing namespace std; int main (){ int x,y;cin>>x>>y; char **a=new (std::nothrow)char*[x+2]; for(int i=0;i >a[i][j]; // cout<
地雷正解
#includeusing namespace std; char a[110][110]; int number[110][110]; int dx[]={-1,0,1,-1,0,1,-1,1}; int dy[]={-1,1,0,0,-1,1,1,-1}; void deal(int x,int y){ for(int i=0;i<8;i++){ int xx=x+dx[i]; int yy=y+dy[i]; number [xx][yy]++; } } int main (){ int n,m;cin>>n>>m; for(int i=1;i<=n;i++){ cin>>a[i]+1; } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(a[i][j]=='*')deal(i,j); } } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(a[i][j]=='*')cout<<"*"; else cout<< number [i][j]; } cout<<'n'; } return 0; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)