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