牛客网---2016---网易扫描滤镜
来源:互联网 发布:成都杜甫草堂美食知乎 编辑:程序博客网 时间:2024/06/14 03:57
题目:
在N*M的草地上,提莫种了K个蘑菇,蘑菇爆炸的威力极大,兰博不想贸然去闯,而且蘑菇是隐形的.只 有一种叫做扫描透镜的物品可以扫描出隐形的蘑菇,于是他回了一趟战争学院,买了2个扫描透镜,一个 扫描透镜可以扫描出(3*3)方格中所有的蘑菇,然后兰博就可以清理掉一些隐形的蘑菇. 问:兰博最多可以清理多少个蘑菇?
注意:每个方格被扫描一次只能清除掉一个蘑菇。
输入:
第一行三个整数:N,M,K,(1≤N,M≤20,K≤100),N,M代表了草地的大小;
接下来K行,每行两个整数x,y(1≤x≤N,1≤y≤M).代表(x,y)处提莫种了一个蘑菇.
一个方格可以种无穷个蘑菇.
输出:
输出一行,在这一行输出一个整数,代表兰博最多可以清理多少个蘑菇.
解析:
1. 首先值得注意的是,每次清理过的地方,蘑菇就会消失,但是每个小方格可能种植多个蘑菇,所以每次扫描蘑菇数目-1,并不能完全清楚,换句话讲,就是每一个方格一次只能清理掉一个蘑菇。
解题所需函数:
1 . 涉及到了很重要的概念,参数为数组时候的函数。
传对象或是数组。因为对象和数组传的是引用。基本数据类型传的是值。当传入参数时,会在函数内部copy一分放在栈中。对于对象或数组被传时结果是多个引用指向同一个对象。通过引用改变对象的状态。这种改变出了函数依然存在。
代码:
import java.util.*;// 主函数public class Main { public static void main(String[] args) { // 用于获取控制台数据 Scanner scanner = new Scanner(System.in); // 初始化第一行将要录入的数据 草地长,草地宽,种植个数 int N = 0; int M = 0; int K = 0; // while (scanner.hasNext()) { // 赋值第一行数据 N = scanner.nextInt(); M = scanner.nextInt(); K = scanner.nextInt(); // 做数据溢出整理,如果不满足条件,直接return if (N <1 || N >20){ return; } if (M <1 || M >20){ return; } if (K <0 || K >100){ return; } // 用于几率炸弹地点,初始值为0,一个方格允许种植很多个蘑菇,为了操作方便,保存一波 int[][] land = new int[M + 1][N + 1]; // 初始值,并录入相应数据,结果是一个N*M的矩阵 int x = 0, y = 0; for (int i = 0; i < K; i++) { x = scanner.nextInt(); y = scanner.nextInt(); land[y][x]++; } // 记录两次扫描的最大结果 int max = 0, secondmax = 0; // 分别记录两次数据 max = findMaxIn(land); secondmax = findMaxIn(land); // 打印结果 System.out.println(max + secondmax); } } // 私有静态函数? 返回值--int型 参数--维数组 private static int findMaxIn(int[][] land) { // 定义值 int max = 0; int maxX = 0, maxY = 0; int num = 0; // 遍历二维数组,一度想把1改成2,但是因为有时候,有的是数据是1,所以千万不要改 for (int i = 1; i < land.length - 1; i++) { // 横轴为land.length,纵轴为land[0].length for (int j = 1; j < land[0].length - 1; j++) { // 以该点为中心辐射,做一个九宫格,判断数据 for (int k = i-1; k <=i+1; k++) { for (int m = j-1; m <=j+1; m++) { // 若该点有蘑菇,则进行累加 if(land[k][m]>0) num++; } } // 最简单的替换原则,并记录该点信息 if (num > max){ max = num; maxX = j; maxY = i; } // 重新归零,进行下一次遍历 num = 0; } } // 遍历结束后,更新数值 for (int i = maxY - 1; i <= maxY + 1; i++) { for (int j = maxX - 1; j <= maxX + 1; j++) { if (land[i][j] > 0) land[i][j]=land[i][j]-1; } } // 返回结果 return max; }}
阅读全文
0 0
- 牛客网---2016---网易扫描滤镜
- 网易 扫描透镜
- 网易2016研发工程师编程题 扫描透镜
- 网易2016研发工程师编程题-----扫描透镜
- 牛客网---2016---网易奖学金
- 牛客网---2016---网易路灯
- 牛刀小试(03)——透镜扫描(网易2016研发工程师编程题)
- 牛客网---2016---网易炮台攻击
- 滤镜
- 滤镜
- 滤镜
- 滤镜
- 滤镜
- 滤镜
- 滤镜
- 滤镜
- 滤镜
- 滤镜
- URI和 URL区别
- 十四 iOS之 活动指示器
- 转载 用来自己学习的
- 如何让网页自适应所有屏幕宽度
- 路由页面跳转
- 牛客网---2016---网易扫描滤镜
- mysql 命令常用
- deeplabv2 (vgg实现版本) + resnet101实现版本手稿结构
- centos7桥接后不能上网问题解决
- Spring Cloud构建微服务架构分布式配置中心
- 轻松学习 JavaScript (2):函数中的 Rest 参数
- 一文读懂 JavaScript 和 ECMAScript 的区别
- 用AngularJS路由实现web站点的页面
- RMAN-06094: datafile 1 must be restored ID 1339439.1