原题链接:Minesweeper
解题思路: 简单阐述一下题目,就是先输入x,y分别为二维数组行和列,然后输入一个扫雷二维数组,' . '为要填数字的地方,' * ' 是雷的地方,需要遍历周围的8个格确定有几个雷,然后打在屏幕上,有雷的地方就标雷,话不多说,直接上代码.
参考代码:
#includeusing namespace std;
char a[101][101]; //用来存放输入的数组
char ans[101][101]; //存放答案的数组
int nx[8] = {1,1,1,0,-1,-1,-1,0};
int ny[8] = {1,0,-1,1,1,0,-1,-1};//这两个数组用来遍历周围8个格子
int x,y,i,j;
main()
{
for(int c=0; ;c++)
{
cin >> x >> y;
if(x==0&&y==0)//如果为0 0则跳出死循环
break;
for(i=0;i<x;i++) //输入二维数组
for(j=0;j> a[i][j];
for(i=0;i<x;i++)
{
for(j=0;j<y;j++)
{
if(a[i][j]=='*') //为雷则标雷
{
ans[i][j] = '*';
continue;
}
int sum = 0;
for(int k=0;k<8;k++)
{
int newx = i+nx[k];
int newy = j+ny[k];//循环判断周围的点是否为雷
if(newx<0||newy<0)
continue;
if(a[newx][newy]=='.')
continue;
else if(a[newx][newy]=='*')
{
sum++;
}
}
ans[i][j] = sum+'0';//因为要用字符存因此要加'0'
}
}
cout<<"Field #"<<c+1<<":"<<endl;
for(int i=0;i<x;i++)
{
for(int j=0;j<y;j++)
cout<<ans[i][j];
cout<<endl;
}
cout<<endl;
}
}0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复