题目:
扫雷。扫雷游戏你一定玩过吧!现在给你若干个n×m的地雷阵,请你计算出每个矩阵中每个单元格相邻单元格内地雷的个数,每个单元格最多有8个相邻的单元格。 0< n,m< =100
(注意两个矩阵之间应该有一个空行,由于oj的格式化这里不能显示出来)
* 输入:
输入包含若干个矩阵,对于每个矩阵,第一行包含两个整数n和m,分别表示这个矩阵的行数和列数。接下来n行每行包含m个字符。安全区域用‘.’表示,有地雷区域用'*'表示。当n=m=0时输入结束。数据规模和约定:0< n,m< =100
* 输出:
对于第i个矩阵,首先在单独的一行里打印序号:“Field #i:”,接下来的n行中,读入的'.'应被该位置周围的地雷数所代替。输出的每两个矩阵必须用一个空行隔开。
注意点:
1.回车键 容易当成字符被吃掉,在下文有说明
2.注意程序在一定条件下还将进行二次运行 测试自己的程序时需要在第一次运行完时,再输入测试数据看可不可以运行。
#include"stdio.h"
#include"string.h"
int main()
{
int n,m;
char mines[1000][1000]={'\0'};
int i,j;
int Row,Column;
int num=0,count=0;//num周围地雷数 count表
while(n!=0&&m!=0)
{
printf("请分别输入行和列的值:\n");
scanf("%d%d",&n,&m);
getchar();
count++; //那个表头的数字
printf("请输入该矩阵:\n");
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
scanf("%c",&mines[i][j]);
if(mines[i][j]=='\n')//回车容易被吃掉,所以需要加上这一句
{
j--;
}
}
}
printf("Field#%d:\n",count);
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(mines[i][j]=='.')
{
num=0;
//看八个方位的是否存在地雷 并计数
for(Row=i-1;Row<=i+1;Row++)
{
for(Column=j-1;Column<=j+1;Column++)
{
if((mines[Row][Column]=='*'))
{
num++;
}
}
}
printf("%d",num);
}
else
{
printf("*");
}
}
printf("\n");
}
}
return 0;
}
下面进行第一回
第二回家人们自己去试一试吧!!!记得输入0 0 结束程序哦!