鱼C论坛

 找回密码
 立即注册
查看: 14222|回复: 169

题目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 | 显示全部楼层
  1. def ou(x):
  2.         o = [2]
  3.         a,b = 1,2
  4.         for i in range(2,x):
  5.                 a,b=b,a+b
  6.                 if b % 2 ==0:
  7.                         o.append(b)
  8.         else:
  9.                 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 编辑
  1. # include<stdio.h>

  2. int main()
  3. {
  4.         int i=2,j=1,q,total;
  5.         while(j<4000000)
  6.         {
  7.                 q=i;
  8.                 i=i+j;
  9.                 j=q;
  10.                 if(i%2==0)
  11.                 {
  12.                         total+=i;
  13.                 }
  14.         }
  15.         printf("%d\n",total);
  16.         return 0;
  17. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> 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 | 显示全部楼层
  1. def Fi(x):
  2.         yield 1
  3.         yield 2
  4.         n=1
  5.         n2=2
  6.         y=3
  7.         while x>y:
  8.                 yield y
  9.                 y=n+n2
  10.                 n=n2
  11.                 n2=y
  12. sum(x for x in Fi(4000000) if not(x%2))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2015-7-19 22:03:49 | 显示全部楼层
  1. #include<stdio.h>
  2. void main()
  3. {
  4.         int f1 = 1, f2 = 2, f3;
  5.         int n =0;
  6.         double i = 3.0;
  7.         long int j = 4, sum = 0;
  8.         while(j<4000000)/*先算出不超过的一共有几项*/
  9.         {
  10.                 j = f1 +f2;
  11.                 f1 = f2;
  12.                 f2 = j;
  13.                 n++;
  14.         }
  15.         f1 =1;
  16.         f2 =2;
  17.         while(n - 1 > 0)/*判断是否为偶数如果是就 加到sum中*/
  18.         {
  19.                 f3 = f1 + f2;
  20.                 f1 = f2;
  21.                 f2 = f3;
  22.                 if(f3%2!=1)
  23.                 {
  24.                         sum += f3;
  25.                         n--;
  26.                 }
  27.                 else
  28.                 {
  29.                         n--;
  30.                 }
  31.                
  32.         }
  33.         printf("sum = %ld\n",sum+2);
  34. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

  2. int main()
  3. {
  4.     long int i,j,k,sum;

  5.         i = 1;
  6.         j = 2;
  7.         sum = 0;

  8.     while (j < 4000000)
  9.     {
  10.                 if(j % 2 == 0)
  11.                 {
  12.                         sum += j;
  13.                 }
  14.                
  15.                 k = j;
  16.                 j += i;
  17.                 i = k;


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

  20.         return 0;
  21. }
复制代码


答案输出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 | 显示全部楼层
  1.     SUM = 0
  2.     l1 = [1,2]
  3.     while(True):
  4.         n = l1[-1]+l1[-2]
  5.         if n > 4000000:
  6.             break
  7.         else:
  8.             l1.append(n)
  9.     for n in l1:
  10.         if n % 2 == 0:
  11.             SUM += n
  12.     print(SUM)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-15 10:26:29 | 显示全部楼层
本帖最后由 ianv 于 2016-3-15 10:27 编辑
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. int fib(int i)
  4. {
  5.         if (i>1)
  6.                 return fib(i-1)+fib(i-2);
  7.         else
  8.         {
  9.                 if (0==i)
  10.                         return 0;
  11.                 if (1==i)
  12.                         return 1;
  13.         }
  14. }
  15. int main()
  16. {
  17.         int i=0;
  18.         long sum=0;
  19.         int N=100;
  20.         for (i;i<N;i++)
  21.         {
  22.                 if(fib(i)<4000000)
  23.                 {
  24.                         if(fib(i)%2==0)
  25.                         {
  26.                                 printf("%d\t",fib(i));
  27.                                 sum+=fib(i);
  28.                         }
  29.                 }
  30.                 else
  31.                 {
  32.                         printf("finish!!");
  33.                         break;
  34.                 }
  35.         }
  36.         printf("\nsum=%d",sum);
  37.         getchar();
  38. }
复制代码

先用递归写了一个斐波那契数列,然后再测试程序中判断
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

  11. print(sum)
复制代码

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

使用道具 举报

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

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

使用道具 举报

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

  6. fib1 = fibs(34)

  7. sum = 0
  8. for i in fib1:
  9.    if i % 2 ==0:
  10.        sum +=i

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

使用道具 举报

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

使用道具 举报

发表于 2016-6-13 11:26:07 | 显示全部楼层
  1. a,b=1,1
  2. c=a+b
  3. s=0
  4. while c<=4000000:
  5.     if c%2==0 : s=s+c
  6.     c=a+b
  7.     a,b=b,c
  8. print(s)
复制代码


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

使用道具 举报

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

  12. print(c)
复制代码

  1. #include<stdio.h>

  2. void main()
  3. {
  4.     int a, b, c, sum = 0;
  5.     for (a = 1, b = 1, c = a + b;c <= 4000000;c++ )
  6.     {
  7.         if (c % 2 == 0)
  8.             sum += c;
  9.         a = b;
  10.         b = c;
  11.         c = a + b;
  12.     }
  13.     printf("sum = %d\n",sum);
  14. }
复制代码


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

使用道具 举报

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

  2. void sum(int n){
  3.         long long SUM=2;
  4.         int a=1,b=2,i;
  5.         for(i=3;i<=n;i++){
  6.                 int t=b;
  7.                 b=a+b;
  8.                 a=t;
  9.                 if(0==i%2)SUM+=b;
  10.         }
  11.         printf("%lld",SUM);
  12. }

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 05:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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