| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 563 人关注过本帖
标题:你会吗?
只看楼主 加入收藏
yelo20053533
Rank: 1
等 级:新手上路
帖 子:161
专家分:0
注 册:2006-11-27
收藏
 问题点数:0 回复次数:8 
你会吗?

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 
2006-12-02 16:05
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
有个操作系统中带了这个小游戏,那个系统叫什么来着?windows都带吧.


这个题目应该不是很难.
两重循环搜索所有.的八个方向(判断边界问题)的*个数(+'0')更改该元素的值.

倚天照海花无数,流水高山心自知。
2006-12-02 17:55
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分: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);
}

倚天照海花无数,流水高山心自知。
2006-12-02 19:14
yelo20053533
Rank: 1
等 级:新手上路
帖 子:161
专家分:0
注 册:2006-11-27
收藏
得分:0 

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

2006-12-02 20:23
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 
图形区斑竹以前做了个扫雷的
作的想当好的
你去翻一翻
2006-12-03 00:31
yelo20053533
Rank: 1
等 级:新手上路
帖 子:161
专家分:0
注 册:2006-11-27
收藏
得分:0 
got it
2006-12-03 01:02
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
以下是引用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;
}

....

}


倚天照海花无数,流水高山心自知。
2006-12-03 09:16
财鸟
Rank: 1
等 级:新手上路
帖 子:132
专家分:0
注 册:2006-11-2
收藏
得分:0 
我靠!!!!!!!!这程序不就是W里的踩地雷游戏吗!!!!!!!!!!!!!
2006-12-03 10:48
yelo20053533
Rank: 1
等 级:新手上路
帖 子:161
专家分:0
注 册:2006-11-27
收藏
得分:0 
以下是引用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循环

2006-12-03 17:15
快速回复:你会吗?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030098 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved