题目:
解法1.0
果然没有那么得轻巧啊…看来不懂脑子果然不得行啊!(哭 ~_-…
果然T了,看我纯粹暴力解法的代码:
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner a=new Scanner(System.in);
int number=a.nextInt();
a.close();
BigInteger[] f=new BigInteger[number];
f[0]=new BigInteger("1");
if(number>1){
f[1]=new BigInteger("1");
Fhanshu(number,f);
}
System.out.println(f[number-1].mod(new BigInteger("10007")));
}
public static void Fhanshu(int a,BigInteger [] f){
int i=2;
while(i<a){
f[i]=f[i-1].add(f[i-2]);
++i;
}
}
}
分析
为什么会T了呢,因为递归的内存占用大啊…
正解
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
scanner.close();
if(n>3)
System.out.println(getValue(n) % 10007);
else
System.out.println(1);
}
static int getValue(int n) {
long n_1 = 1,n_2 = 1, s = 0;
for (int i = 2; i < n; i++) {
if(n_1>10007){
n_1%=10007;
}
if(n_2>10007){
n_2%=10007;
}
s = n_1 + n_2;
n_2 = n_1;
n_1 = s;
}
return (int) (s%10007);
}
}
提交即可通过啦。这道题最开始的时候我没过,是因为我用的递归,当输入的数值非常大 的时候是非常占用内存的,所以在第二种解法中我将递归换成了迭代,这样的避免了占用大内存,所以递归虽然简便,但是也不是长久之计啊。