zoukankan      html  css  js  c++  java
  • 炸弹人游戏

    一、游戏规则

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

     

    二、题目分析

    • 我们先将这个地图模型化。墙用#表示,敌人用G表示,空地用 . 表示(当然如果你想换成其他的符号也可以),炸弹只能放在空地上。
    #############
    #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列。

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

     

    三、代码如下

        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个敌人
    ",p,q,map);
        return 0; 

  • 相关阅读:
    SqlServer数据库SQL语句(超详细)
    oracle sql语句
    MySQL常用SQL语句
    一路走来,风雨兼程,也谈笑风生
    个人第五次——测试别人的项目
    团队第五次——Alpha2的发布
    团队第四次——Alpha版本的发布
    团队第三次——系统设计
    第四次作业 结对编程
    团队第二次作业——需求分析
  • 原文地址:https://www.cnblogs.com/OctoptusLian/p/6785418.html
Copyright © 2011-2022 走看看