学习编程语言需要兴趣,一个有趣的代码可能会成为你持之以恒学习的动力。故此,小编编写此文章,希望学习C语言的小新们能够保持对编程的兴趣与热爱!
那么,现在就让我们进入今天的扫雷世界。
描述:
输入' 0 '和' -1 '形成 n行*m列的雷矩阵(“-1”表示雷),输出时按 扫雷规则 显示雷以及除雷以外的数组元素(该数组元素的值等于以该元素为中心的九宫格包含的雷的个数)。
输入描述:
第一行输入行数n及列数m的值。第二行输入矩阵包含的' 0 '和' -1 '。
输出描述:
输出的扫雷矩阵的每一行每一列都是一个数字,每个数字的含义是与当前位置相邻的8个格子中,有多少个雷(在下图中,雷用*表示);
若当前位置就是雷的话,仍输出雷 “-1”。
关键点:1.涉及到矩阵边界雷得识别需限制条件;
2.九宫格遍历(可由两个for循环解决,也可用若干个if语句解决,但此方法比较繁琐);
初始的雷矩阵如下:
1 | -1 | 1 | 0 | 0 | 0 |
2 | 2 | 2 | 1 | 1 | 1 |
1 | -1 | 2 | 2 | -1 | 1 |
2 | 3 | -1 | 2 | 1 | 1 |
1 | -1 | 2 | 2 | 1 | 1 |
1 | 1 | 1 | 1 | -1 | 1 |
代码如下:
#include<stdio.h>
int main()
{
int n,m;
printf("输入n与m的值:");
scanf("%d%d",&n,&m);
int i,j;
int k,l;
int a[n][m];
int count;
getchar(); //消耗换行符
printf("\n输入矩阵元素:\n");
for(i=0;i<n;i++){
for(j=0;j<m;j++) {
scanf("%d",&a[i][j]);}
getchar();}
printf("输出扫雷矩阵:\n");
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(a[i][j]!=-1)
{
count=0;
for(k=i+1;k>=i-1;k--) //遍历九宫格
{
for(l=j+1;l>=j-1;l--)
{
if(k>=0&&k<n&&l>=0&&l<m) //记录除中心块的九宫格中所含雷
{
if(a[k][l]==-1)
count ++;
}
}
}
printf("%2d ",count);
}
else
printf("%2d ",a[i][j]);
}
printf("\n");
}
return 0;
}
代码运行结果如下:
以上内容是扫雷的基础算法,若有想做完全版的扫雷小游戏可以去B站找扫雷视频哦!
不过千万要记得要会配置相应的语言环境。
总结:今天的出题与解题就到这里辣,有不会的小伙伴们
可以评论区发表意见,我会一一解答哦!
如果您觉得小编写的还可以或者还有哪些地方需要改进的话评论区留言好嘛!
感谢您的阅读!