zoukankan      html  css  js  c++  java
  • Java实现第九届蓝桥杯全球变暖

    全球变暖
    题目描述
    你有一张某海域NxN像素的照片,"."表示海洋、"#"表示陆地,如下所示:
    
    .......
    .##....
    .##....
    ....##.
    ..####.
    ...###.
    .......
    
    其中"上下左右"四个方向上连在一起的一片陆地组成一座岛屿。例如上图就有2座岛屿。  
    
    由于全球变暖导致了海面上升,科学家预测未来几十年,岛屿边缘一个像素的范围会被海水淹没。具体来说如果一块陆地像素与海洋相邻(上下左右四个相邻像素中有海洋),它就会被淹没。  
    
    例如上图中的海域未来会变成如下样子:
    
    .......
    .......
    .......
    .......
    ....#..
    .......
    .......
    
    请你计算:依照科学家的预测,照片中有多少岛屿会被完全淹没。  
    
    【输入格式】
    第一行包含一个整数N。  (1 <= N <= 1000)  
    以下N行N列代表一张海域照片。  
    
    照片保证第1行、第1列、第N行、第N列的像素都是海洋。  
    
    【输出格式】
    一个整数表示答案。
    
    【输入样例】
    7 
    .......
    .##....
    .##....
    ....##.
    ..####.
    ...###.
    .......  
    
    【输出样例】
    1  
    
    资源约定:
    峰值内存消耗(含虚拟机) < 256M
    CPU消耗  < 1000ms
    
    
    请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
    
    所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
    不要使用package语句。不要使用jdk1.7及以上版本的特性。
    主类的名字必须是:Main,否则按无效代码处理。
    
    
    import java.util.Scanner;
    /**
     * 2018蓝桥杯Java B组 全球变暖问题:
     * 条件:
     .代表海洋像素,#代表像素,相连的一块#代表岛屿,如果陆地像素左右上下某个方向有海洋便会被淹没成海洋
    
     输入:
     7
     .......
     .##.....
     .##.....
     ...##..
     ..###...
     ...##..
     .......
    
    输出:
     .......
     .......
     .......
     .......
     ...#...
     .......
     .......
     * Created by XQM on 2018/4/2.
     */
    public class Main{
        public static void main(String[] args){
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();//输入n构成n*n二维数组
            String[] s = new String[n];
            char[] c;
            char[][] a = new char[n][n];//存储输入的字符
            char[][] b = new char[n][n];//存储输出的字符
    
            //输入
            for (int i = 0;i < n;i++){
                s[i] = sc.next();
                c = s[i].toCharArray();
                for (int j = 0; j < n;j++){
                    a[i][j] = c[j];
                    b[i][j] = c[j];
                }
            }
    
            char temp;
            //题目的要求是第一行、第一列、最后一行、最后一列都是.
            for (int i = 0;i < n;i++){
                for (int j = 0; j < n;j++){
                    if (i != 0 && i != 6 && j != 0 && j != 6){
                        temp = a[i][j];
                        if (temp == '#'){
                            if ((temp != a[i][j-1]) || (temp != a[i-1][j]) || (temp != a[i][j+1]) || (temp != a[i+1][j])){
                                b[i][j] = '.';
                            }
                        }
                    }else {
                        b[i][j] = '.';
                    }
                }
    
            }
    
            //输出
            for (int i = 0;i < n;i++){
                for (int j = 0; j < n;j++){
                    System.out.print(b[i][j]);
                }
                System.out.println();
            }
        }
    }
    
    
  • 相关阅读:
    深入浅出MySQL灵魂十连问,你真的有把握吗?
    sharding-jdbc
    计算表数据大小,加查询表数据大小情况sql
    高并发下数据库分库分表面试题整理
    干货|一次MySQL两千万数据大表的优化过程,三种解决方案
    CompletableFuture 使用详解
    mysql innodbd 锁
    mysql : show processlist 详解
    微信支付V2.0-python
    python代码打包加密
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13077548.html
Copyright © 2011-2022 走看看