java题,关于数组的。

有一个数组1,2,3后面的数字等于前面2数字的和,
如 3=1+2;
5=2+3;
8 =5+3;
13=5+8;
现在计算1,2,3,4,5,8,13,21,34,55,89,.....,300万数组中偶数的总和。

说思路啥的也行。

这个叫斐波那契数列吧,求其中的偶数这个数也够大的。
long a[3000000];
a[0] = 1;a[1]=2;
for循环
偶数加
这样会不会炸。

前面的数组应该是这样的吧
1,2,3,5,8,13,21,34,55,89^300万吧

要注意从第三个元素开始才是满足这个条件的
可以先把1-300万这300万个数筛选出这个数组,再根据数组中每个元素是否满足指数条件。

一个for循环两个if 判断 即可
这个过程中,重要的是要找到全局变量的规律
具体实现:
for i in (1-300万数组)
if 数组[2]=数组【1】+数组【0】
if 数组2==质数
sum =sum+数组【2】

print sum           

重新来答一下。

 #include"iostream"
using namespace std;
int main()
{
    long tmp=0,sum=0,i = 1,j=2;
    while(i<=3000000)
    {
        tmp = i+j;
        cout<<tmp<<"\t";
        i = j;
        j = tmp;
        if(i%2==0)
            sum+=tmp;
    }
    cout<<sum;
}

图片说明

求采纳(^U^)ノ~YO

试了一下,好像没问题

 package mathDemo;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;

public class IncreasingArray {
    static List<Integer> list = new ArrayList<>();
    public static List<Integer> initArray(int n) {
        while (list.get(list.size() - 1) <= n) {
            list.add(list.get(list.size() - 1) + list.get(list.size() -2));
        }
        return list;
    }
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("i: ");
        int i = in.nextInt();
        int sum = 0;
        list.add(1);
        list.add(2);
        initArray(i);
        list.remove(list.size() - 1);
        Iterator<Integer> iterator = list.iterator();
        while (iterator.hasNext()) {
            int index = iterator.next();
            if (index%2 == 0) {
                System.out.println("even number: " + index);
                sum += index;
            } else {
                System.out.println("odd number: " + index);
            }
        }
        System.out.print("sum = " + sum);
    }
}

图片说明

简单粗暴,递归调用实现斐波那契数列,求和除以二即可

这么简单的问题,都被你们搞复杂了, 不说了,上代码,
public class TestRecursion {

private  static long count = 0 ;

public static void main(String[] args) {
    //循环的得到数,并求出
    long sum = getSum(1, 2);
    System.out.println(sum);

}

private static long getSum(long i, long j) {
    //System.out.println("此时第一个数的值是:"+i+", 此时第二个数的值是:"+j);
    //求每一个数
    if(i%2==0){
        count +=i;
        System.out.println(i);
    }
    if(j<3000000){
    long num1 = j ;
    long num2 =i+j; 
      getSum(num1, num2);
    }
    return count;
}

}

很明显,人家出这个题,考察的是你的观察能力
规律:1 2 之后的数据,都是2奇数1偶数,2奇数和 等于 1偶数
偶数和 等于 2 加上 3到300万之和除以2
1到300万是一个相差1的等差数列
最后结果:30000001*300/2-1 = 450000149

我算错了一步,不好意思
上面答案是错的

人家出这个题,考察的是你的观察能力
规律:1 2 之后的数据,都是2奇数1偶数,2奇数和 等于 1偶数
偶数和 等于 1到300万这个斐波那契数列之和 除以2,最后减1

直接给你代码吧,手残5分钟写的,着急了

#以下内容为python实现
f = [1,2]
o = []
sum = 2
for n in range(2,3000000):
    a = f[n-1]+f[n-2]
    if a <=3000000:
        if a%2==0:
            o +=[a]
        f += [a]
    else:break
for oc in o:
    sum = sum+oc
print(f)
print(o)
print(sum)

输出结果分别是
1、1-300万中满足斐波那契数列的数组

[1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309]
2、1-300万中满足斐波那契额数列的数组除了2其他的偶数
[8, 34, 144, 610, 2584, 10946, 46368, 196418, 832040]
3、题中求和结果
1089154

python实现-精简版

i=1;j=2;sum=0
while i<3000000:
    if j%2==0 and j<3000000:
        sum=sum+j
    (i,j)=(j,i+j)
print(sum)

答案是:450万。。。。
奇数和 = 偶数数
s(300万-2) = s(300万)
结果是 300万+ 150万=450万