并非最边界的情况"OK"就真的"OK"(记洛谷P1720WA的经历)
程序员文章站
2024-03-17 21:04:04
...
题目要求
分析
这个题纯粹在鬼扯,数学基础OK的人一眼就看得出是斐波那契数列。
求Fn其实是程设基础水平的题,千万别写递归——O((5/3)^n),真的慢~~
这破题为啥还WA
我也不想啊,看着Fib,我心中的警惕心就起来了,想着int不一定稳,就用long把题AC了,但是我换成int测了一下48(题示边界值),结果是非负的,看起来是OK的:
我就用int交了一次,错了最后一个测试用例:
回测一下47:
不深究原因,显然溢出,爆了int,那就只能long咯,这破题,不至于BigInteger……
AC代码(Java语言描述)
很简洁:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
scanner.close();
long num1 = 1, num2 = 1, result = 0;
for (int i = 3; i <= num; i++) {
result = num1 + num2;
num1 = num2;
num2 = result;
}
System.out.println(result + ".00");
}
}
警示
我们在提交之前一般会自己测一下题给测试用例或者极限情况,但就算极限情况“OK”(其实不OK),也起码应多测几次……
既然是long过了,试试int是为了让自己多一些敏感性,看看这种问题int能否解决,我觉得有必要诶……