所有偶数斐波那契数的总和
Sum of all even Fibonacci numbers
我正在尝试获取所有偶数斐波那契数的总和。我可以打印出这些数字,但我无法得到它们的总和。这是在 java.
class driver {
public static void main(String [] args) {
int a;
int b = 0;
int c = 1;
for (int i = 0; i < 10; i++) { // Finds fibonacci sequence
a = b;
b = c;
c = a + b;
if ( c % 2 == 0) { // Check if it's even
int sum = 0;
sum = sum + c;
System.out.println(sum);
}
else {
}
}
}
}
在for循环外声明整型变量sum。应该可以了。
你不应该在循环中每次都重新初始化 sum
,因为这会导致它失去它的值。它的范围应该在 if
之外,以便每次都可以递增相同的变量。
class driver {
public static void main(String [] args) {
int a;
int b = 0;
int c = 1;
int sum = 0;
for (int i = 0; i < 10; i++) { // Finds fibonacci sequence
a = b;
b = c;
c = a + b;
if (c % 2 == 0) // Check if it's even
sum += c;
}
System.out.println(sum);
}
}
public static void main(String [] args) {
int a;
int b = 0;
int c = 1;
int sum = 0;
for (int i = 0; i < 10; i++) { // Finds fibonacci sequence
a = b;
b = c;
c = a + b;
if ( c % 2 == 0) { // Check if it's even
sum += c;
}
}
System.out.println(sum);
}
您最初设置 sum = 0 每次 'c' 是偶数。只有在进程开始之前,此代码才应作为 sum = 0 工作。这实际上是一个常见的错误,但您很快就会知道这是个坏主意。
如你所知,我将 System.out.println(sum) 语句放在循环之外,因此你不会有 10 个不同的数字作为输出。
public final class eu_p002_sol {
public static void main(String[] args) {
System.out.println(new eu_p002_sol().run());
}
public String run() {
int sum = 0;
for (int x = 0; ; x++) {
int fib = fibonacci(x);
if (fib > 4000000)
break;
if (fib % 2 == 0)
sum += fib;
}
return Integer.toString(sum);
}
private static int fibonacci(int n) {
if (n < 0 || n > 46)
throw new IllegalArgumentException();
int a = 0;
int b = 1;
for (int i = 0; i < n; i++) {
int c = a + b;
a = b;
b = c;
}
return a;
}
}
试试这个
也许有人还在寻找正确答案:
static int sum = 0, seq = 0;
public static void main(String[] args) {
fib(1,2);
}
static void fib(int i, int j) {
seq = j;
if (seq <= 4000000) {
if (j % 2 == 0) {
sum += j;
}
fib(j, i + j);
} else {
System.out.println(sum);
}
}
我正在尝试获取所有偶数斐波那契数的总和。我可以打印出这些数字,但我无法得到它们的总和。这是在 java.
class driver {
public static void main(String [] args) {
int a;
int b = 0;
int c = 1;
for (int i = 0; i < 10; i++) { // Finds fibonacci sequence
a = b;
b = c;
c = a + b;
if ( c % 2 == 0) { // Check if it's even
int sum = 0;
sum = sum + c;
System.out.println(sum);
}
else {
}
}
}
}
在for循环外声明整型变量sum。应该可以了。
你不应该在循环中每次都重新初始化 sum
,因为这会导致它失去它的值。它的范围应该在 if
之外,以便每次都可以递增相同的变量。
class driver {
public static void main(String [] args) {
int a;
int b = 0;
int c = 1;
int sum = 0;
for (int i = 0; i < 10; i++) { // Finds fibonacci sequence
a = b;
b = c;
c = a + b;
if (c % 2 == 0) // Check if it's even
sum += c;
}
System.out.println(sum);
}
}
public static void main(String [] args) {
int a;
int b = 0;
int c = 1;
int sum = 0;
for (int i = 0; i < 10; i++) { // Finds fibonacci sequence
a = b;
b = c;
c = a + b;
if ( c % 2 == 0) { // Check if it's even
sum += c;
}
}
System.out.println(sum);
}
您最初设置 sum = 0 每次 'c' 是偶数。只有在进程开始之前,此代码才应作为 sum = 0 工作。这实际上是一个常见的错误,但您很快就会知道这是个坏主意。
如你所知,我将 System.out.println(sum) 语句放在循环之外,因此你不会有 10 个不同的数字作为输出。
public final class eu_p002_sol {
public static void main(String[] args) {
System.out.println(new eu_p002_sol().run());
}
public String run() {
int sum = 0;
for (int x = 0; ; x++) {
int fib = fibonacci(x);
if (fib > 4000000)
break;
if (fib % 2 == 0)
sum += fib;
}
return Integer.toString(sum);
}
private static int fibonacci(int n) {
if (n < 0 || n > 46)
throw new IllegalArgumentException();
int a = 0;
int b = 1;
for (int i = 0; i < n; i++) {
int c = a + b;
a = b;
b = c;
}
return a;
}
}
试试这个
也许有人还在寻找正确答案:
static int sum = 0, seq = 0;
public static void main(String[] args) {
fib(1,2);
}
static void fib(int i, int j) {
seq = j;
if (seq <= 4000000) {
if (j % 2 == 0) {
sum += j;
}
fib(j, i + j);
} else {
System.out.println(sum);
}
}