网易2017春招笔试真题编程题集合——9 涂棋盘

网易2017春招笔试真题编程题集合——9.涂棋盘

题目:

小易有一块n*n的棋盘,棋盘的每一个格子都为黑色或者白色,小易现在要用他喜欢的红色去涂画棋盘。小易会找出棋盘中某一列中拥有相同颜色的最大的区域去涂画,帮助小易算算他会涂画多少个棋格。

原题地址在这里:牛客网

输入描述:

  • 输入数据包括n+1行:
  • 第一行为一个整数n(1 ≤ n ≤ 50),即棋盘的大小
  • 接下来的n行每行一个字符串表示第i行棋盘的颜色,'W'表示白色,'B'表示黑色

输出描述:

输出小易会涂画的区域大小

输入例子:

3 BWW BBB BWB

输出例子

3

用java编写,思路是这样的:

1 使用java.util.Scanner接收控制台输入 2 定义两个变量int iw,ib和一个数组int[] maxs:

  • iw用于累加当前列 W 连续出现的次数
  • ib用于累加当前列 B 连续出现的次数
  • maxs 数组用于记录每一列出现的拥有相同颜色的最大的区域(即在一列中出现 连续的相同颜色的单元格 的最大个数)
  • 遍历(双层循环)保存了W/B的二维数组,在内层循环里判断当前 单元格 的值是 W 还是 B ,是 W 的话:
  • 先 让负责记录当前列中 W 连续出现次数的 iw 自增1
  • **后 判断用于记录当前列出现 “拥有相同颜色的最大的区域” 的 maxs[i]的值是否小于此时的 iw ,是则把 iw 的值赋给他,否则不改变他的值 **
  • 最后 让负责记录当前列中 B 连续出现次数的 ib 置为0,因为此时遇到了 W ,即 B 不连续了,被 W 打断了
  • 遇到 B 也是同样的操作:ib 自增1,判断当前的 maxs[i] ,把 iw 置为0;
  • 注意在开始遍历每一列前(外层循环内)要把 iw , ib ,maxs[i]置为0;
代码
import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        if (!(n >= 1 && n <= 50))
            return;
        in.nextLine();
        char[][] res = new char[n][n];
        for (int i = 0; i < n; i++) {
            String str = in.nextLine();
            for (int j = 0; j < n; j++) {
                res[i][j] = str.charAt(j);
            }
        }

        int iw = 0, ib = 0;
        int[] maxs= new int[n];

        for (int i = 0; i < n; i++) {
            maxs[i] = 0;
            iw = ib = 0;
            for (int j = 0; j < n; j++) {
                if (res[j][i] == 'W') {
                    iw++;
                    maxs[i] = iw > maxs[i] ? iw : maxs[i];
                    ib = 0;
                } else {
                    ib++;
                    maxs[i] = ib > maxs[i] ? ib : maxs[i];
                    iw = 0;
                }
            }
        }
        Arrays.sort(maxs);
        System.out.println(""+maxs[maxs.length - 1]);

    }
}
复制代码

提交运行 之后就会提示通过所有测试用例:

注意点:
  • 在使用 Scanner 接收控制台输入时先调用了 int nextInt() 方法,程序运行到该句时会阻塞,等待控制台输入并按回车,之后该方法就会返回输入的 int 值,别忘了此时还有一个 回车符 没有被解析,先要调用 String nextLine()回车符 消耗掉,否则在之后调用 String nextLine()获取输入的 W/B 时会出错。
  • 调用Arrays类的void sort(int[] a)方法对 maxs数组进行排序(升序),输出 maxs[maxs.length - 1]即为所求。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值