鱼C论坛

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

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

  [复制链接]
发表于 2019-8-6 17:45:09 | 显示全部楼层
#include <stdio.h>
#include <time.h>


int main()
{
    int begin_time, end_time;
    begin_time = clock();

    int a = 1, b = 2, temp, sum = 0;
    while(b < 4000000)
    {
        if(b % 2 == 0)
        {
            sum += b;
        }
        temp = a;
        a = b;
        b = a + temp;
    }
    printf("斐波那契数列中数值不超过 4 百万的偶数项之和为%d\n", sum);
   
    end_time = clock();
    printf("\n程序一共运行%dms\n", end_time - begin_time);

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

使用道具 举报

发表于 2019-9-26 17:06:07 | 显示全部楼层
        @Test
        public void test02() {
                int a = 1, b = 0, c = 0, num = 0;
                while (c >= 0) {
                        c = a + b;
                        a = b;
                        b = c;
                        if (c >= 4000000) {
                                break;
                        }
                        System.out.println(c);
                        if (c % 2 == 0) {
                                num += c;
                        }
                }
                // System.out.println(num);
        }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-4 16:26:08 | 显示全部楼层
import tkinter as tk
a,b,c=1,1,1
x = 0
while True:
    c = a + b
    a = b
    b = c
    if c < 4000000 and c % 2 == 0:
        x += c
    elif c >= 4000000:
        break
r = tk.Tk()
tk.Label(r,text=x).pack()
r.mainloop()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-8 16:31:21 | 显示全部楼层
#include <stdio.h>

void main(){
        //斐波那契数列中的每一项都是前两项的和。由1和2开始生成的斐波那契数列前10项为:
        //1, 2, 3, 5, 8, 13, 21, 34, 55, 89, …
        //考虑该斐波那契数列中不超过四百万的项,求其中为偶数的项之和。
       
        long x[10];//400万项,说明是个数组
        x[0]=1;//定义前两个值,用来运算
        x[1]=2;//
        long i,sum=x[1];//定义的数中有偶数,先加在sum中
        for(i=2;i<10;i++){//在这个数组内循环一遍
                x[i]=x[i-1]+x[i-2];//第三个数开始,等于前两个数的和 ,循环给x[2]及以后的数赋值
                if(x[i]%2==0){//如果这个数是偶数(能整除2)
                        sum+=x[i];//加到sum里面
                }       
        }
        printf("sum=%d\n",sum);//输出结果
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-18 10:31:25 | 显示全部楼层
  1. int find_odd(int maxnum)
  2. {
  3.     int a=1,b=2,sum=2;
  4.     int *p;
  5.     for(int i=1;i<maxnum;i++)
  6.     {
  7.         if(i>2)
  8.         {
  9.             p=&i;
  10.             if( (*p) == (a+b) )     // 找出斐波那契数
  11.             {
  12.                 printf("p=%d\n",*p);
  13.                 a=b;
  14.                 b=*p;
  15.                 if( (*p)%2 == 0 )   // 找出斐波那契数中的值为偶数的项
  16.                 {
  17.                     sum+=*p;
  18.                     printf("sum=%d\n",sum);
  19.                 }
  20.             }
  21.         }
  22.     }
  23.     return sum;
  24. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-31 13:44:17 | 显示全部楼层
#include <stdio.h>
int main(int argc,char **argv)
{
    long int sum  = 2;
    int var1 = 1;
    int var2 = 2;
   
    int var3 = var1 + var2;
    while(var3 <= 4000000){
        if(var3 % 2 == 0){
            sum += var3;
        }

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

使用道具 举报

发表于 2020-1-10 17:07:38 | 显示全部楼层
#include <stdio.h>

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

使用道具 举报

发表于 2020-2-14 12:06:58 | 显示全部楼层
  1. x = 0
  2. y = 1
  3. z = 0
  4. while True:  
  5.     x = x + y
  6.     if x >= 4e6:
  7.         print('A',z)
  8.         break
  9.     y = x + y
  10.     if y >= 4e6:
  11.         print('B',z)
  12.         break
  13.     if y%2 == 0:
  14.         z = z + y
  15.     if x%2 == 0:
  16.         z = z + x
  17.         
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-22 11:51:35 | 显示全部楼层
#include <stdio.h>

int main()
{
    long long int a = 1, b= 2, c = 0,sum = 0, a1 = 0, b1 = 0;
    while(1)
    {
        if (c > 4000000){break;}
        c = a + b;
        a = b;
        b = c;
        if(c % 2 ==0){sum += c;printf("111");}
    }
    printf("%dkkkk", c);
    printf("答案:%d", sum + 2); //刚开始2是偶数,加上。
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-27 15:41:00 | 显示全部楼层
  1. def Fibonacci(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.     return sum(o)

  9. if __name__ == '__main__':
  10.     print(Fibonacci(10))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-29 16:13:08 | 显示全部楼层
  1. #include <stdio.h>
  2. int main(void)
  3. {
  4.         int a=1,b=2;
  5.         int tatol=0,sum=2;
  6.         do
  7.         {
  8.                 if (sum>4000000) break;
  9.                 if (!(sum%2)) tatol+=sum;
  10.                 sum=a+b;
  11.                 a=b;
  12.                 b=sum;
  13.         }while(1);
  14.         printf("%d",tatol);
  15.         return 0;
  16. }
复制代码
  1. 4613732
  2. --------------------------------
  3. Process exited after 0.01523 seconds with return value 0
  4. 请按任意键继续. . .
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-11 21:11:41 | 显示全部楼层
答案:4613732
  1. int calculateFibona(int flag)
  2. {
  3.     int ret = 0;
  4.     int a = 1;
  5.     int b = 1;
  6.     int c = a;
  7.     while(a < flag)
  8.     {
  9.         if(a % 2 == 0)
  10.         {
  11.             ret += a;
  12.         }
  13.         c = a;
  14.         a = a + b;
  15.         b = c;
  16.     }
  17.     return ret;
  18. }

  19. int main(int argc, char *argv[])
  20. {
  21.     int sum = calculateFibona(4000000);
  22.     printf("%d\n",sum);
  23.     return 0;
  24. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-31 11:44:49 | 显示全部楼层
def Fibi(num):
    re = 2
    a, b = 1, 2
    for i in range(2, num):
        a, b = b, a + b
        if b % 2 == 0 and b <= 4000000:
            re += b
        else:
            continue
    return re
if __name__ == '__main__':
    print(Fibi(40))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-18 12:54:06 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2020-11-20 22:33 编辑

4613732
  1. #include<iostream>
  2. unsigned int a = 0, b = 1, sum = 0, temp;


  3. int main(void) {
  4.     using namespace std;
  5.     ios::sync_with_stdio(false);


  6.     while (a < 4000000) {
  7.         sum += a;
  8.         a += b;
  9.         b += a;
  10.         temp = a + b;
  11.         a = b;
  12.         b = temp;
  13.     }


  14.     cout << sum << endl;
  15.     return 0;
  16. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-6 22:59:42 | 显示全部楼层
#include <stdio.h>

int main(void) {
    int i = 1;
    int n = 2;
    int sum = 2;

    while (n <= 4000000) {
        int temp = n;
        n += i;
        i = temp;
        if (n % 2 == 0)
            sum += n;

    }

    printf("%d", sum);

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

使用道具 举报

发表于 2020-5-9 13:23:56 | 显示全部楼层

这么跟你说吧,版主也不知道答案,他只是个翻译题目的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-12 10:00:40 | 显示全部楼层
本帖最后由 liuzhengyuan 于 2020-5-12 10:06 编辑

斐波那契数列怎么做我忘了
完了,卡在 2 了

终于做好了……
  1. #include<iostream>
  2. using namespace std;

  3. int main()
  4. {
  5.         int a, b, c, sum=0;
  6.         a=1;b=1;
  7.         for(;b<4000000;)
  8.         {
  9.                 c = a+b;
  10.                 a = b;
  11.                 b = c;
  12.                 if(b%2 == 0)
  13.                 {
  14.                         sum+=b;
  15.                 }
  16.         }
  17.         cout<<sum;
  18. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-12 21:21:08 | 显示全部楼层
liuzhengyuan 发表于 2020-5-12 10:00
斐波那契数列怎么做我忘了
完了,卡在 2 了

不明白你为什么要用for循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-2 19:19:58 | 显示全部楼层
本帖最后由 atomloveanne 于 2020-6-3 01:12 编辑
  1. # # 题目2:在斐波那契数列中,找出4百万以下的项中值为偶数的项之和
  2. # 1 2 3 5 8 13 21 34 ...

  3. import datetime

  4. start = datetime.datetime.now()
  5. print("程序1开始时间:", start)

  6. result = 0
  7. num0 = 0
  8. num1 = 1
  9. num2 = 0
  10. # temp = 1

  11. while num2 < 4000000:
  12.     num2 = num0 + num1
  13.     if num2 % 2 == 0:
  14.         result += num2
  15.         print('result = ', result)
  16.         run = datetime.datetime.now()
  17.         print("程序2运行时间:", run)
  18.         print("程序2运行了", run - start)
  19.     num0 = num1
  20.     num1 = num2
  21. #    temp += 1
  22.    
  23. print('''程序1结果是''')
  24. print(result)

  25. end = datetime.datetime.now()
  26. print("程序1结束时间:", end)
  27. print("程序1运行时间", end - start)

复制代码


程序1结果是
4613732
程序1结束时间: 2020-06-03 01:11:14.858601
程序1运行时间 0:00:00.260303
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-7 21:21:59 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2020-8-8 12:57 编辑

看了一圈  大部分都是循环 判定  
根据斐波那契数列通向公式计算400万的项,向下取整
观察下表
n12345678910111213141516
Fibonacci[n]
1123581321345589144233377610987
偶数出现在3,6,9,。。项   n+=3可以求和了
  1. For[i = 3; t = 0, Fibonacci[i] < 4000000, i += 3, t += Fibonacci[i]];t
复制代码

斐波那契数列通向公式

                               
登录/注册后可看大图

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +5 收起 理由
永恒的蓝色梦想 + 5 + 5 + 5 不错

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 15:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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