【发布时间】:2014-11-22 03:55:54
【问题描述】:
我试图找到给定一组 N 输入的偶数斐波那契数的总和(从标准输入获得)
此代码在某些测试用例中运行良好,但会为测试用例打印运行时错误(未提供详细信息)。
问题链接:https://www.hackerrank.com/contests/projecteuler/challenges/euler002
代码
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
import java.util.*;
public class Solution {
public static Integer[] convert(int[] chars) {
Integer[] copy = new Integer[chars.length];
Arrays.fill(copy, 0);
for(int i = 0; i < copy.length; i++) {
copy[i] = Integer.valueOf(chars[i]);
}
return copy;
}
public static void main(String[] args) {
/* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
int x, max;
int a[], sum[], fib[];
Scanner in = new Scanner(System.in);
x = in.nextInt();
a = new int[x];
sum = new int[x];
for(int i=0;i<x;i++)
{
a[i] = in.nextInt();
}
Integer[] b = convert(a);
max = Collections.max(Arrays.asList(b));
fib = new int[max];
if (max >1)
{
fib[0]=1;
fib[1]=1;
}
for(int i=2;i<max;i++)
{
fib[i] = fib[i-1]+fib[i-2];
}
for(int i =0;i<x;i++)
{
for(int j = 0;fib[j]<a[i];j++)
{
if(fib[j]%2 ==0)
sum[i] = sum[i] + fib[j];
}
}
for(int i=0;i<x;i++)
{
System.out.println(sum[i]);
}
}
}
感谢任何帮助。
如果您能帮助我提供相同的优化版本,我将不胜感激。
【问题讨论】:
-
您能指出您的代码中哪里有问题吗?
-
指出确切的运行时错误也是有益的。
-
斐波那契是世界上最糟糕的问题,所以有些情况甚至超级计算机也需要 100 年才能得到答案
-
幸运的是他的最大值被定义为一个整数,所以不用担心计算时间。
-
解释这样做的目的:
for (int i = 0; i < x; i++) { a[i] = in.nextInt(); }为什么要用用户输入的值填充数组?而且,更糟糕的是,你为什么不提示用户?用户是否应该猜测所需的输入时间和类型?
标签: java runtime-error fibonacci