炸弹人——枚举小题
原创
炸弹人的游戏大家都玩过,这一次我们求在哪块空地放一个炸弹能炸死最多的人。
假设炸弹威力是无穷的(只要不遇到墙,四个方向的火力能无限延伸)。
用#代替墙,用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 }
测试例子:
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