C语言经典题目“扫雷”代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
扫雷(选做)
输入
输入中将包括一系列的地图,每个地图的第一行有两个整数n 和m(0 <n,m <= 100),它们表示了地图的行数和列数。
下面的n 行每行都有m 个字符,其中"." 表示安全而"*" 表示地雷。
如果地图的n 和m 都为0,则表示输入结束。
输出
针对每一个地图,首先输出一行:
Field #x:其中x 是当前地图的编号(从1 开始)。
下面的n 行则将地图中的"." 以数字表示,该数字表示该方格周围有多少颗地雷。
程序:
#include<stdio.h>
#define N 110
void main()
{
char a[N][N];
int n,m,t,i,j,k=1;
static int b[N][N];
for(n=m=1; n!=0 && m!=0; )
{
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
b[i][j]=0;
}
scanf("%d %d",&n,&m);
for(t=n;t>0;t--)
scanf("%s",a[n-t]);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(a[i][j]=='*')
{
b[i][j]++;b[i+1][j]++;b[i+2][j]++;b[i][j+1]++;b[i+2][j+1]++;b[i][j+2]++;b[i+1][j+2]++;b[i+2][j+2]+ +;
}
}
}
if(n!=0&&k>1) {printf("\nField #%d:\n",k); k++;}
else if(n!=0) {printf("Field #%d:\n",k); k++;}
for(i=0;i<n;i++,printf("\n"))
{
for(j=0;j<m;j++)
{
if(a[i][j]=='*') printf("*");
else printf("%d",b[i+1][j+1]);
}
}
}
}。