前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >炸弹人游戏

炸弹人游戏

作者头像
Zoctopus
发布2018-06-04 11:16:23
7910
发布2018-06-04 11:16:23
举报
文章被收录于专栏:章鱼的慢慢技术路

一、游戏规则

你只有一枚炸弹,但是这枚炸弹威力超强(杀伤距离超长,可以消灭杀伤范围内所有的敌人)。请问在哪里放置炸弹才可以消灭最多的敌人?

二、题目分析

  • 我们先将这个地图模型化。墙用#表示,敌人用G表示,空地用 . 表示(当然如果你想换成其他的符号也可以),炸弹只能放在空地上。
代码语言:javascript
复制
#############
#GG.GGG#GGG.#
###.#G#G#G#G#
#.......#..G#
#G#.###.#G#G#
#GG.GGG.#.GG#
#G#.#G#.#.###
##G...G.....#
#G#.#G###.#G#
#...G#GGG.GG#
#G#.#G#G#.#G#
#GG.GGG#G.GG#
############# 
  • 首先我们需要用一个二维字符数组来存储这个地图
  • 分别统计上下左右四个方向上可以消灭的敌人数

向另外几个方向进行统计的坐标变化如下:

注意,坐标(x,y)指的是第x行第y列。

代码语言:javascript
复制
//向上统计可以消灭的敌人数
while(a[x][y]!='#')  //判断是不是墙,如果不是墙就继续 
{
    if(a[x][y]=='G')  //如果当前点是敌人 
      sum++;  //计数 
    x--;  //否则继续向上统计 
}
代码语言:javascript
复制
//向下统计可以消灭的敌人数
while(a[x][y]!='#')
{
    if(a[x][y]=='G')
        sum++;
    x++;  //继续向下统计 
}
代码语言:javascript
复制
//向左统计可以消灭的敌人数
while(a[x][y]!='#')
{
    if(a[x][y]!='G')
        sum++;
    y--;  //继续向左统计 
}
代码语言:javascript
复制
//向右统计可以消灭的敌人数
while(a[x][y]!='#')
{
    if(a[x][y]!='G')
        sum++;
    y++;  //继续向右统计 
}
  • 接下来只需要统计在每一个空地上放置炸弹可以消灭的敌人总数。
  • 最终输出消灭敌人数最多的那个空地的坐标即可。

三、代码如下

代码语言:javascript
复制
    char a[20][21];
    int i,j,sum,map=0,p,q,x,y,n,m;
    scanf("%d %d",&n,&m);  //n表示有多少行字符,m表示每行有多少列 
    
    for(i=0;i<=n-1;i++)  //读入n行字符 
        scanf("%s",a[i]);
        
    for(i=0;i<=n-1;i++)
    {
        for(j=0;j<=m-1;j++)
        {
            if(a[i][j]=='.')  //判断这个点是不是平地,是平地才可以被放置炸弹 
            {
                sum=0;  //用来计数,表示可以消灭的敌人数,需要初始化 
                x=i;y=j;  //向上统计可以消灭的敌人数 
                while(a[x][y]!='#')  //判断是不是墙,如果不是墙就继续 
                {
                    if(a[x][y]=='G')  //如果当前点是敌人 
                        sum++;  //计数 
                    x--;  //否则继续向上统计 
                }
                
                x=i;y=j;  //向下统计可以消灭的敌人数 
                while(a[x][y]!='#')
                {
                    if(a[x][y]=='G')
                        sum++;
                    x++;  //继续向下统计 
                }
                
                x=i;y=j;  //向左统计可以消灭的敌人数 
                while(a[x][y]!='#')
                {
                    if(a[x][y]!='G')
                        sum++;
                    y--;  //继续向左统计 
                }
                
                x=i;y=j;  //向右统计可以消灭的敌人数 
                while(a[x][y]!='#')
                {
                    if(a[x][y]!='G')
                        sum++;
                    y++;  //继续向右统计 
                }
                /*更新map的值*/ 
                if(sum>map)  //如果当前点所能消灭的敌人总数大于map 
                {
                    map=sum;  //则更新map 
                    p=i;  //用p,q记录当前点的坐标 
                    q=j;
                }
            }
        }
    }
    
    printf("将炸弹放置在(%d,%d),最多可以消灭%d个敌人\n",p,q,map);
    return 0; 
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-04-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、游戏规则
  • 二、题目分析
  • 三、代码如下
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档