先读取第一行的三个数,再设计算法。 这里我比较笨,没有用什么好的算法,却也没厚着脸皮直接完全暴力求解……(不过还是暴力解法)
数据结构的话,N×N的boolean数组即可,乍一看是不可避免的。
对于萤石,就是很简单啦,直接开双层循环就完事,构成一个5×5方阵即可。 对于火把,就需要先处理~~
我们分别对黑色圈内的和非黑色圈内的部分进行处理即可。
注意细节细节分析起来挺曲折的,虽然这题还是不难。
需要注意的是数组越界,在Java里用了二维数组还涉及边界情况,就跑不开ArrayIndexOutOfBoundsException,必须对边界情况详细分析。
另需要注意的是我们用的数组是[0 ~ N-1][0 ~ N-1],然而输入的是1 ~ N,这个一定不要搞错了呀。
自测WA按照提供的测试用例测试,结果应该是12,打印的是16,多了4个,于是发现bug在与我没看清楚“火把”的7、9、17、19四个位置是true(亮的),于是乎,修复。
不断的自测,感觉良好,提交去~~
第一次提交——RE+WA 分析一下为啥WA,其实发现就是上面说的那个问题,没理解清楚给的测试数据其实是我们人类计数的方式(从1开始),从而处理错了。
再分析RE,运行时的异常一般来说这里就是数组越界了,读读代码看不出来,那就测试边界。
发现是-1越界,就找代码,发现这个: 其实想想也是,既然是合理的算法,为啥会重复报warning呢,必是Ctrl+V的时候没改好…… 修复:
再次提交~~
没WA证明思路基本OK,RE就还是数组越界,很烦人……
于是想到自己的测试在矩阵左上角测的,右下角没测试,补测一下:
太真实了,真的错了,55555~~
修复一下: 反复测试,觉得真的ok了,最终提交~~
好开心啊!(虽然这题初中一年级水平,wtcl~~)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//矩阵大小参数
int matrixLen = scanner.nextInt();
//火把数
int torchNum = scanner.nextInt();
//萤石数
int candNum = scanner.nextInt();
//创建矩阵
boolean[][] matrix = new boolean[matrixLen][matrixLen];
//填充火把可以照亮的位置
for (int i = 0; i = 0) {
//左不越界+上不越界
if (y - 1 >= 0) {
matrix[x-1][y-1] = true;
}
//左不越界+下不越界
if (y + 1
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?