• 炸弹人——枚举小题


    原创


    炸弹人的游戏大家都玩过,这一次我们求在哪块空地放一个炸弹能炸死最多的人。

    假设炸弹威力是无穷的(只要不遇到墙,四个方向的火力能无限延伸)。

    用#代替墙,用G代表敌人,用.代表空地,炸弹只能放在空地上,所以只要在空地处向4个方向

    扫描能炸死多少个敌人即可。

     1 import java.util.Scanner;
     2 
     3 public class bomb {
     4 
     5     public static void main(String[] args) {
     6         Scanner reader=new Scanner(System.in);
     7         int n=reader.nextInt();    //
     8         int m=reader.nextInt();    //
     9         int q=0;
    10         int p=0;
    11         int max=0;
    12         char array[][]=new char[n][m];
    13         for(int i=0;i<=n-1;i++) {    //数组赋值
    14             String ss=reader.next();
    15             array[i]=ss.toCharArray();
    16         }
    17         for(int i=0;i<=n-1;i++) {
    18             for(int j=0;j<=m-1;j++) {
    19                 if(array[i][j]=='.') {    //空地
    20                     int num=0;    //可炸死的人数
    21                     int x=i;
    22                     int y=j;
    23                     while(array[x][y]!='#') {    //向上扫描
    24                         if(array[x][y]=='G') {
    25                             num++;
    26                         }
    27                         x--;
    28                     }
    29                     x=i;
    30                     y=j;
    31                     while(array[x][y]!='#') {    //向下扫描
    32                         if(array[x][y]=='G') {
    33                             num++;
    34                         }
    35                         x++;
    36                     }
    37                     x=i;
    38                     y=j;
    39                     while(array[x][y]!='#') {    //向左扫描
    40                         if(array[x][y]=='G') {
    41                             num++;
    42                         }
    43                         y--;
    44                     }
    45                     x=i;
    46                     y=j;
    47                     while(array[x][y]!='#') {    //向右扫描
    48                         if(array[x][y]=='G') {
    49                             num++;
    50                         }
    51                         y++;
    52                     }
    53                     if(num>max) {
    54                         max=num;
    55                         q=i;
    56                         p=j;
    57                     }
    58                 }
    59             }
    60         }
    61         System.out.println("("+q+","+p+")"+" "+max);
    62     }
    63 }
    View Code

    测试例子:

    13 13
    #############
    #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#
    #############

    答案:(9,9) 8——即在坐标(9,9)出能炸死最多敌人,能炸死8个

    17:16:45

    2018-07-14

  • 相关阅读:
    java图片裁剪原理
    代码整洁之道
    vue.js devtools安装
    Convert DateTime To Varchar with multiple Styles
    Sql Server为数值变量添加删除前导后缀(翻译)
    asp.net ckeditor 3.6.2 + ckfinder 2.1 上传图片
    转摘 IE6 动态创建 iframe 无法显示的 bug
    sql server output parameter
    windows7 无法删除文件夹 提示需要SYSTEM权限
    Kooboo 全文索引研究
  • 原文地址:https://www.cnblogs.com/chiweiming/p/9295262.html
Copyright © 2020-2023  润新知