鱼C论坛

 找回密码
 立即注册
查看: 21362|回复: 172

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

  [复制链接]
发表于 2015-4-20 23:16:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 欧拉计划 于 2017-1-14 17:41 编辑
Even Fibonacci numbers

Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:

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

By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.


题目:

斐波那契数列中的每一项被定义为前两项之和。从 1 和 2 开始,斐波那契数列的前十项为:

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

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


评分

参与人数 3荣誉 +6 鱼币 +6 贡献 +6 收起 理由
cwhsmile + 3 4613732速度0.04s
aixuexi82 + 5 + 5 + 3 LZ不把每题的答案公布下吗?
和vvv + 1 + 1 支持楼主!

查看全部评分

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

使用道具 举报

发表于 2015-4-26 11:53:49 | 显示全部楼层
def ou(x):
        o = [2]
        a,b = 1,2
        for i in range(2,x):
                a,b=b,a+b
                if b % 2 ==0:
                        o.append(b)
        else:
                return sum(o)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2015-5-17 19:12:10 | 显示全部楼层
def ou(x):
        a,b =1,1
        global  add
        for i in range(1,x):
                a,b = b,a+b
                if b % 2 == 0:
                        add = add + b
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2015-6-26 00:25:46 | 显示全部楼层
本帖最后由 HALLDY 于 2015-6-26 13:05 编辑
# include<stdio.h>

int main()
{
        int i=2,j=1,q,total;
        while(j<4000000)
        {
                q=i;
                i=i+j;
                j=q;
                if(i%2==0)
                {
                        total+=i;
                }
        }
        printf("%d\n",total);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-6-29 15:50:24 | 显示全部楼层
本帖最后由 翅膀团 于 2015-11-16 14:08 编辑

我的解答是:
#include <stdio.h>

int main(void)
{
    int a=0,b=1,result=0,i;
   
    for(i=0;i<=4000000;i++)
    {
        a = a + b;
        b = a + b;
        if(a % 2 ==0)
        {
        result += a;
        }
        else if(b % 2 ==0)
        {
        result += b;
        }
    }
    printf("%d\n",result);
}
如果有错误希望指出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 1

使用道具 举报

发表于 2015-7-8 18:37:07 | 显示全部楼层
def Fi(x):
        yield 1
        yield 2
        n=1
        n2=2
        y=3
        while x>y:
                yield y
                y=n+n2
                n=n2
                n2=y
sum(x for x in Fi(4000000) if not(x%2))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2015-7-19 22:03:49 | 显示全部楼层
#include<stdio.h>
void main()
{
        int f1 = 1, f2 = 2, f3;
        int n =0;
        double i = 3.0;
        long int j = 4, sum = 0;
        while(j<4000000)/*先算出不超过的一共有几项*/
        {
                j = f1 +f2;
                f1 = f2;
                f2 = j;
                n++;
        }
        f1 =1;
        f2 =2;
        while(n - 1 > 0)/*判断是否为偶数如果是就 加到sum中*/
        {
                f3 = f1 + f2;
                f1 = f2;
                f2 = f3;
                if(f3%2!=1)
                {
                        sum += f3;
                        n--;
                }
                else
                {
                        n--;
                }
                
        }
        printf("sum = %ld\n",sum+2);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-10-29 01:57:45 | 显示全部楼层
#include <stdio.h>

int main()
{
    long int i,j,k,sum;

        i = 1;
        j = 2;
        sum = 0;

    while (j < 4000000)
    {
                if(j % 2 == 0)
                {
                        sum += j;
                }
                
                k = j;
                j += i;
                i = k;


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

        return 0;
}

答案输出4613732
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2015-12-22 00:34:52 | 显示全部楼层

你好,我想问下,为什么我复制了你的代码贴进去 计算出来不显示结果呀?是我哪里操作错误了吗? 能帮忙告诉一下吗? 谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-23 00:25:58 | 显示全部楼层
鸡汤不加盐 发表于 2015-12-22 00:34
你好,我想问下,为什么我复制了你的代码贴进去 计算出来不显示结果呀?是我哪里操作错误了吗? 能帮忙告 ...

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

使用道具 举报

发表于 2016-3-1 23:30:36 | 显示全部楼层
    SUM = 0
    l1 = [1,2]
    while(True):
        n = l1[-1]+l1[-2]
        if n > 4000000:
            break
        else:
            l1.append(n)
    for n in l1:
        if n % 2 == 0:
            SUM += n
    print(SUM)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-15 10:26:29 | 显示全部楼层
本帖最后由 ianv 于 2016-3-15 10:27 编辑
#include<stdio.h>
#include<stdlib.h>
int fib(int i)
{
        if (i>1)
                return fib(i-1)+fib(i-2);
        else
        {
                if (0==i)
                        return 0;
                if (1==i)
                        return 1;
        }
}
int main()
{
        int i=0;
        long sum=0;
        int N=100;
        for (i;i<N;i++)
        {
                if(fib(i)<4000000)
                {
                        if(fib(i)%2==0)
                        {
                                printf("%d\t",fib(i));
                                sum+=fib(i);
                        }
                }
                else
                {
                        printf("finish!!");
                        break;
                }
        }
        printf("\nsum=%d",sum);
        getchar();
}
先用递归写了一个斐波那契数列,然后再测试程序中判断
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2016-4-18 20:39:53 | 显示全部楼层
sum = 0
f1 = 1
f2 = 1
f3 = 2
while f3 < 4000000:
    if f3 % 2 == 0:
        sum += f3
    f1 = f2
    f2 = f3
    f3 = f1 + f2

print(sum)
运行还要比较缓慢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-1 21:56:10 | 显示全部楼层
def fib(max_n=4000000):
    a, b = 0, 1
    while b < max_n:
        if b%2 == 0:
            yield b
        a, b = b, a + b

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

使用道具 举报

发表于 2016-5-2 21:55:00 | 显示全部楼层
def fibs(num):
    result = [0,1]
    for i in range(num-2):
        result.append(result[-2]+result[-1])
    return result

fib1 = fibs(34)

sum = 0
for i in fib1:
   if i % 2 ==0:
       sum +=i

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

使用道具 举报

发表于 2016-6-10 15:45:50 | 显示全部楼层
a = [1,2]
while a[-1]+a[-2]<4000000:
        a.append(a[-1]+a[-2])
print(sum(num for num in a if num%2==0))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-13 11:26:07 | 显示全部楼层
a,b=1,1
c=a+b
s=0
while c<=4000000:
    if c%2==0 : s=s+c
    c=a+b
    a,b=b,c
print(s)

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

使用道具 举报

发表于 2016-7-3 17:13:21 | 显示全部楼层
result = 0
a = 1
b = 1
c = a + b
while (c <= 4000000):
    if c % 2 == 0:
        result += c
    a = b
    b = c
    c = a + b
    

print(c)
#include<stdio.h>

void main()
{
    int a, b, c, sum = 0;
    for (a = 1, b = 1, c = a + b;c <= 4000000;c++ )
    {
        if (c % 2 == 0)
            sum += c;
        a = b;
        b = c;
        c = a + b;
    }
    printf("sum = %d\n",sum);
}

两个代码结果不一样,求大神指出问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-7-11 10:31:00 | 显示全部楼层
此题的数据结果比较大,用long long类型比较好。。
4048803411799
#include<cstdio>

void sum(int n){
        long long SUM=2;
        int a=1,b=2,i;
        for(i=3;i<=n;i++){
                int t=b;
                b=a+b;
                a=t;
                if(0==i%2)SUM+=b;
        }
        printf("%lld",SUM);
}

int main()
{
        sum(4000000);
        //4000000
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 3

使用道具 举报

发表于 2016-8-7 15:02:44 | 显示全部楼层
#include<stdio.h>
int main()
{
        int i=1,j=2; 
        long long sum=0;
        long long k,a=2;
        for(k=1;k<=4000000;k++)
        {
                sum=i+j;
                i=j;
                j=sum;
                
                if(sum%2==0)
                {
                        a+=sum;
                }
        }
        printf("偶数的和是%d\n",a);
        
        return 0;
} 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 10:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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