当前位置: 代码迷 >> C语言 >> 你会吗?
  详细解决方案

你会吗?

热度:324   发布时间:2006-12-02 16:05:39.0
你会吗?

The Problem

*...
....
.*..
....

根据上面的地图,可以计算出应该提供给游戏者的数字如下所示:

*100
2210
1*10
1110

每个数字表示了该方格周围到底有几个地雷,当然,一个方格周围最多的时候只会有八个。

The Input

输入中将包括一系列的地图,每个地图的第一行有两个整数 n 和 m(0 <n,m <= 100),它们表示了地图的行数和列数。下面的 n 行每行都有 m 个字符,其中 "." 表示安全而 "*" 表示地雷。如果地图的 n 和 m 都为 0,则表示输入结束。

The Output


针对每一个地图,首先输出一行:

Field #x:
其中 x 是当前地图的编号(从 1 开始)。下面的 n 行则将地图中的 "." 以数字表示,该数字表示该方格周围有多少颗地雷。

Sample Input

4 4
*...
....
.*..
....
3 5
**...
.....
.*...
0 0

Sample Output
Field #1:
*100
2210
1*10
1110

Field #2:
**100
33200
1*100

[此贴子已经被作者于2006-12-3 1:02:39编辑过]

搜索更多相关的解决方案: center  

----------------解决方案--------------------------------------------------------
有个操作系统中带了这个小游戏,那个系统叫什么来着?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
----------------解决方案--------------------------------------------------------
以下是引用yelo20053533在2006-12-2 20:23:50的发言:

可是输出时两部分之间有隔一行,应该怎么控制呢?

刚开始我没有考虑多组测试的问题.
int flag=0;
while(EOF!=(scanf("%d%d",&n,&m))&&!(n==0&&m==0))
{
if(flag==1)
{
printf("\n");
}
else
{
flag=1;
}

....

}

----------------解决方案--------------------------------------------------------
我靠!!!!!!!!这程序不就是W里的踩地雷游戏吗!!!!!!!!!!!!!
----------------解决方案--------------------------------------------------------

以下是引用nuciewth在2006-12-3 9:16:35的发言:

刚开始我没有考虑多组测试的问题.
int flag=0;
while(EOF!=(scanf("%d%d",&n,&m))&&!(n==0&&m==0))
{
if(flag==1)
{
printf("\n");
}
else
{
flag=1;
}

....

}

谢谢,我已经自己解决了,我用的是while循环
----------------解决方案--------------------------------------------------------

  相关解决方案