【HackerRank】 有洞的地图

给你一个n*n的地图。地图中的每个格子有一个值表示该地区的深度。我们称一个地图中的一个格子为空洞,当且仅当该格子不在地图边缘并且每个和它相邻的格子都具有比它更小的深度。两个格子称为相邻如果它们共有一条边。

你要找到地图中所有的空洞,并且用X描述。

输入格式

第一行包含一个整数n,表示地图的规模。 接下来n行中每行包含n个无空白的正数字。每个数字(1-9)表示对应区域的深度。

输出格式

输出n行,表示最终的地图结果。每个空洞要用字符X替换。

约束条件

1<=n<=100

1n100


 

题解:简单的模拟。

题解:

 1 import java.io.*;
 2 import java.util.*;
 3 import java.text.*;
 4 import java.math.*;
 5 import java.util.regex.*;
 6 
 7 public class Solution {
 8     public static void main(String[] args) {
 9         Scanner in = new Scanner(System.in);
10         int n = in.nextInt();
11         int[][] ar = new int[n][n];
12         for(int i = 0;i < n;i++){
13             String temp = in.next();
14             for(int j = 0;j < n;j++)
15                 ar[i][j] = temp.charAt(j) - '0'; 
16         }
17         
18         for(int i = 0;i < n;i++){
19             StringBuffer sb = new StringBuffer();
20             for(int j = 0;j < n;j++){
21                 boolean isHole = true;
22                 //up
23                 if(i-1<0||i+1>=n||j-1<0||j+1>=n)
24                     isHole = false;
25                 else{
26                     if(ar[i-1][j] >= ar[i][j])
27                         isHole = false;
28                     if(ar[i+1][j] >= ar[i][j])
29                         isHole = false;
30                     if(ar[i][j-1] >= ar[i][j])
31                         isHole = false;
32                     if(ar[i][j+1] >= ar[i][j])
33                         isHole = false;
34                 }
35                 
36                 if(isHole)
37                     sb.append('X');
38                 else {
39                     sb.append(ar[i][j]); 
40                 }
41             }
42             System.out.println(sb.toString());
43         }
44       }
45 }

 

posted @ 2014-08-02 13:11  SunshineAtNoon  阅读(333)  评论(0编辑  收藏  举报