The Problem*... 根据上面的地图,可以计算出应该提供给游戏者的数字如下所示: *100 每个数字表示了该方格周围到底有几个地雷,当然,一个方格周围最多的时候只会有八个。 The Input输入中将包括一系列的地图,每个地图的第一行有两个整数 n 和 m(0 <n,m <= 100),它们表示了地图的行数和列数。下面的 n 行每行都有 m 个字符,其中 "." 表示安全而 "*" 表示地雷。如果地图的 n 和 m 都为 0,则表示输入结束。 The Output
Field #x:其中 x 是当前地图的编号(从 1 开始)。下面的 n 行则将地图中的 "." 以数字表示,该数字表示该方格周围有多少颗地雷。
Sample Input4 4 Sample Output |
[此贴子已经被作者于2006-12-3 1:02:39编辑过]
----------------解决方案--------------------------------------------------------
有个操作系统中带了这个小游戏,那个系统叫什么来着?windows都带吧.
这个题目应该不是很难.
两重循环搜索所有.的八个方向(判断边界问题)的*个数(+'0')更改该元素的值.
----------------解决方案--------------------------------------------------------
/*写了个,看看可以不*/
#include<stdio.h>
#define N 100
int main()
{
char map[N][N];
int n,m;
int i,j;
scanf("%d%d",&n,&m);
getchar();
for( i=0;i<n;i++)
{
scanf("%s",map[i]);
}
for( i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(map[i][j]=='.')
{
int count=0;
if(i>0&&map[i-1][j]=='*') //左
{
count++;
}
if(i<m-1&&map[i+1][j]=='*') //右
{
count++;
}
if(j>0&&map[i][j-1]=='*') //上
{
count++;
}
if(j<m-1&&map[i][j+1]=='*') //下
{
count++;
}
if(i>0&&j>0&&map[i-1][j-1]=='*') //左上
{
count++;
}
if(i>0&&j<m-1&&map[i-1][j+1]=='*') //左下
{
count++;
}
if(i<m-1&&j>0&&map[i+1][j-1]=='*') //右上
{
count++;
}
if(i<m-1&&j<m-1&&map[i+1][j+1]=='*') //右下
{
count++;
}
map[i][j]=count+'0';
}
}
}
for(i=0;i<n;i++)
{
printf("%s\n",map[i]);
}
return(0);
}
----------------解决方案--------------------------------------------------------
可是输出时两部分之间有隔一行,应该怎么控制呢?
----------------解决方案--------------------------------------------------------
图形区斑竹以前做了个扫雷的
作的想当好的
你去翻一翻
----------------解决方案--------------------------------------------------------
got it
----------------解决方案--------------------------------------------------------
可是输出时两部分之间有隔一行,应该怎么控制呢?
刚开始我没有考虑多组测试的问题.
int flag=0;
while(EOF!=(scanf("%d%d",&n,&m))&&!(n==0&&m==0))
{
if(flag==1)
{
printf("\n");
}
else
{
flag=1;
}
....
}
----------------解决方案--------------------------------------------------------
我靠!!!!!!!!这程序不就是W里的踩地雷游戏吗!!!!!!!!!!!!!
----------------解决方案--------------------------------------------------------
刚开始我没有考虑多组测试的问题.
int flag=0;
while(EOF!=(scanf("%d%d",&n,&m))&&!(n==0&&m==0))
{
if(flag==1)
{
printf("\n");
}
else
{
flag=1;
}
....
}
谢谢,我已经自己解决了,我用的是while循环
----------------解决方案--------------------------------------------------------