原题链接:Minesweeper
解题思路:
难的是翻译,再次体现学好英语的重要。
大意就是跟window自带的扫雷一样,数字提醒你它的四周有多少雷,输出末尾要空行,提交时忘了空行错了两次...
参考代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n, m, t = 1;
cin >> n >> m;
while ( n != 0 && m != 0){
int i, j;
char saolei[n][m];
int jilu[n][m];
for( i = 0 ; i < n; i++) //初始化
for( j = 0; j < m; j++ )
jilu[i][j] = 0;
for( i = 0 ; i < n; i++)
for( j = 0; j < m; j++ ){
cin >> saolei[i][j];
if( saolei[i][j] == '*' ){ //发现地雷
jilu[i][j] = -1; //把地雷记录为-1,方便后续处理
if( i > 0)
if(jilu[i-1][j] != -1 ) //如果此处是地雷,则无需++,下同
jilu[i-1][j]++;
if( i+1 < n)
if( jilu[i+1][j] != -1 )
jilu[i+1][j]++;
if( j > 0)
if( jilu[i][j-1] != -1)
jilu[i][j-1]++;
if( j+1 < m)
if( jilu[i][j+1] != -1)
jilu[i][j+1]++;
if( i > 0 && j > 0)
if( jilu[i-1][j-1] != -1)
jilu[i-1][j-1]++;
if( i+1 < n && j+1 < m)
if( jilu[i+1][j+1] != -1)
jilu[i+1][j+1]++;
if( j+1 < m && i > 0)
if( jilu[i-1][j+1] != -1)
jilu[i-1][j+1]++;
if( i+1 < n && j>0)
if( jilu[i+1][j-1] != -1)
jilu[i+1][j-1]++;
}
}
cout << "Field #" << t++ << ":" << endl;
for( i = 0; i < n; i++){
for( j = 0; j < m; j++){
if( jilu[i][j] == -1) //如果是雷, 输出‘*’
cout << "*" ;
else
cout << jilu[i][j];
}
cout << endl;
}
cout <<endl; //输出最后有个空行
cin >> n >> m;
}
return 0;
}0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复