鱼C论坛

 找回密码
 立即注册
楼主: 欧拉计划

题目2:在斐波那契数列中,找出4百万以下的项中值为偶数的项之和

  [复制链接]
发表于 2018-1-4 10:41:46 | 显示全部楼层
#include <stdio.h>

int main(void)
{
        long f1=1,f2=2;
        long f3=0;
        long sum=2;
       
        while( f3 < 4000000 )
        {
                f3=f2+f1;
                if ( f3 % 2==0)
                {
                        sum+=f3;
                }
                f1=f2;
                f2=f3;
        }
       
        printf("%ld",sum);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-8 12:30:38 | 显示全部楼层
#include <stdio.h>

 #define MAX 4000000

 int main(void)
 {
     int first = 1;
     int second = 2;
     int tmp;
     long sum = 0;

     while (first <= MAX && second <= MAX )
     {
         if (second % 2 == 0)
         {
             sum += second;
         }
         tmp = first;
         first = second;
         second += tmp;
     }

     printf("%ld\n", sum);
     return 0;
 }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-4 20:39:51 | 显示全部楼层
t = lambda x: x if x < 2 else t(x-1)+t(x-2)
sum1 = sum([j for j in [t(i) for i in range(4000000)] if not j%2])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-14 12:27:54 | 显示全部楼层
def fib(n):
    if n == 1:
        return 1
    elif n == 2:
        return 2
    else:
        return fib(n - 1) + fib(n - 2)
lis = []
i = 1
s = 0
while fib(i) <= 4000000:
    lis.append(fib(i))
    i += 1
for j in lis:
    if j % 2 == 0:
        s += j
print('Fib数列为:',lis)
print('Fib数列中偶数和为:%d' % s)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-26 14:43:07 | 显示全部楼层
import time


def fibosum(maxnum):
    global begin
    begin = time.time()
    a = 1
    b = 2
    sum = 2
    while b < maxnum:
        a, b =b, a + b
        if b % 2 == 0:
            sum += b
    return sum


print fibosum(4000000)
print time.time() - begin

python
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-1 17:26:08 | 显示全部楼层
public class Forehe {

    public static void main(String[] args) {
         int sum = 2;

        for (int a = 1,b = 2, c = a+b;c <4000000;c = a+b)
        {
            if(c % 2 == 0)
            {
                sum += c;
            }

            a = b;
            b = c;

        }

        System.out.println(sum);
    }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-11 20:21:55 From FishC Mobile | 显示全部楼层
def fbnq2():
    x = 1
    y = 2
    n = 0
    lis = []
    while n<= 4000000:
        n = y
        y += x
        x = n
        if n % 2 == 0:
            lis.append(n)
    return sum(lis)
   
print fbnq2()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-11 20:22:50 From FishC Mobile | 显示全部楼层
结果是4613732
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-22 15:28:59 | 显示全部楼层
#include<stdio.h >
int main()
{
        long int sum = 2;
        long int f1, f2, f3;
        f1 = 1;
        f2 = 2;
        f3 = f1 + f2;
        while (f3 < 4000000) {
                
                f1 = f2;
                f2 = f3;
                f3 = f1 + f2;
                if (f2 % 2 == 0) {
                        sum += f2;
                }

        }
        printf("%d\n", sum);

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-22 10:48:19 | 显示全部楼层
def Fibonacci(n):
    n1 = 1
    n2 = 1
    n3 = 1

    while (n-2) > 0:
        n3 = n2 + n1
        n1 = n2
        n2 = n3
        n -= 1

    return n3



list1 = []
sum = 0
for n in range(1, 100):
    if Fibonacci(n) < 4000000:
        list1.append(Fibonacci(n))

for each in list1:
    if each % 2 == 0:
        sum += each

print(sum)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-10 21:31:46 | 显示全部楼层
Fibonacci = list()
evenNumber_in_Fibonacci = list()    #verrible2
num_of_terms = 100000

num1 = int(1)
num2 = int(1)
num3 = int()

Fibonacci.extend([num1, num2])  #First term and second term

for i in range(num_of_terms):    #four million terms
    Fibonacci.append(Fibonacci[-2] + Fibonacci[-1])

for i in range(1, num_of_terms):
    evenNumber_in_Fibonacci.append(Fibonacci[i]) if i % 3 == 0 else None
    
sum_of_verrible2 = sum(evenNumber_in_Fibonacci)

最多到十万(只用了一秒)……不然就会卡死(指数级上升的感觉,四十万压力会很大)
如果用C的话可能会好点,差不多到一百万左右
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-16 17:46:33 | 显示全部楼层
#include <stdio.h>
int main(void)
{
        int i=1,j=2,k,sum=0;
        while(i<4000000)
        {
                k=j;
                j=j+i;
                i=k;
                if(j%2==0)
                {
                        sum+=j;
                }
        }
        printf("%d",sum);
        return 0;
}
思考了有一阵子翻了翻前面的答案才想明白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-19 17:29:41 | 显示全部楼层
a,b = 1,1
c = []
while b<4000000:
        a,b = b,a+b
        if b % 2 == 0:
                c.append(b)
a = 0
for each in c:
        a += each
print(a)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-23 10:37:46 | 显示全部楼层
def fib():
    a,b=0,1
    while b<4000000:
        a,b=b,a+b
        if not b%2:
            yield b
print(sum(fib()))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-25 23:49:02 | 显示全部楼层
python
i1 = 1
i2 = 2
t = 2
while 1:
    j = i1 + i2
    i1 = i2
    i2 = j
    if (j > 4000000):
        break
    if (j%2 == 0):
        t = t+j
print(t)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-18 11:16:32 | 显示全部楼层
#斐波那契数列中的每一项被定义为前两项之和。从 1 和 2 开始,斐波那契数列的前十项为:

#1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

print("考虑斐波那契数列中数值不超过 4 百万的项,找出这些项中值为偶数的项之和")

def fab(n):
    he = 0
    a1 = 1
    a2 = 1
    a3 = 0
    while a3 < n:
        a3 = a1 + a2
        a1 = a2
        a2 = a3

        if a3 % 2 == 0:
            print(a3)
            he += a3
    return he

n = int(input('请输入一个正数:'))
print(fab(n))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-9 19:13:55 | 显示全部楼层
DAY 发表于 2016-7-11 10:31
此题的数据结果比较大,用long long类型比较好。。
4048803411799

..你的总和是i<=400万之中偶数和,并不是题目要的偶数和。而且你前十个真的试过吗。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-9 19:16:47 | 显示全部楼层
输出结果:4613732

int i=0,k=0,sum=0;
        int j=1;
        for (; j < 4000000; )
        {
                k=j;
                j+=i;
                i=k;
                if (j%2==0)
                        sum+=j;
        }
        printf("%d",sum);
        system("pause");
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-13 08:06:45 | 显示全部楼层
n1 = 1
n2 = 2
sum = 2

def fib(n1,n2):
        n3 = n1 + n2
        if n3 <= 4000000:
                if n3 % 2 == 0:
                        global sum
                        sum += n3 
                return fib(n2,n3)
        else:
                print('上一个数为:%s'%str(n2))
                print('现在已经到达 %s'%str(n3))
                print('目前总和为:%s'%str(sum)) 

fib(n1,n2)

计算速度,0.1秒
我的答案:4613732
最后一个项中值:3524578
跳出函数项中值:5702887
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-13 08:10:52 | 显示全部楼层
DAY 发表于 2016-7-11 10:31
此题的数据结果比较大,用long long类型比较好。。
4048803411799

这么大吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 16:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表