鱼C论坛

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

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

  [复制链接]
发表于 2018-11-13 08:15:38 | 显示全部楼层
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.0001秒
我的答案:4613732
最后一个项中值:3524578
跳出函数项中值:5702887
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-13 08:19:22 | 显示全部楼层
1314xxxxxx 发表于 2018-7-10 21:31
最多到十万(只用了一秒)……不然就会卡死(指数级上升的感觉,四十万压力会很大)
如果用C的话可能 ...

不要用列表应该会快很多吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-16 10:57:57 | 显示全部楼层
#include <stdio.h>
int main(){
        int before[2] = {1, 2};
        int sum = 2;
        int thisone = 0;
        for(int i = 0; ; i++){
                thisone = before[0] + before[1];
                before[0] = before[1];
                before[1] = thisone;
                if(i % 3 == 2){
                        if(thisone < 4000000)
                                sum += thisone;
                        else
                                break;
                }
        }
        printf("%d", sum);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-24 15:29:22 | 显示全部楼层
for i in range(40):
    if b % 2 == 0:
        result += b
    a,b = b,a+b
    if b >= 4000000:
        print(a,result)
        break
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-18 21:13:12 | 显示全部楼层
4613732
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-5 13:07:34 | 显示全部楼层
#include<stdio.h>
int main()
{
        int result1,result2,sum = 0,number = 40000;
        long f,f1=1,f2=1;
    while(number)
        {
                f=f1+f2;
                f1=f2;
                f2=f;
                if(f1%2==0)
                {
                   result1 += f1;
                }
                if(f2%2==0)
                {
           result2 += f2;
                }
                f1++;
                f2++;
                number--;

        }
        sum = result1+result2;
        printf("%d",sum);
        return 0;

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

使用道具 举报

发表于 2019-2-16 22:53:53 | 显示全部楼层
本帖最后由 LJYUYU 于 2019-2-16 22:56 编辑

#include<stdio.h>
#define MAX 4000000
//利用宏变量把最大值定义
int main()
{
        int sum;
        sum = 2;
        //已知前两个第二个为2,一开始sum就定义为2
        int i, p=1, q=2, s;
        for(i = 3; sum <= MAX; i++){//i:为第几项
                s = p + q;//当前项的值
                p = q;//当前项的千亿项
                q = s;
                if(s % 2 == 0)//判断是否为偶数值
                        sum+=s;
        }
        printf("%d",sum);
        return 0;
}

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

使用道具 举报

发表于 2019-2-21 14:28:36 | 显示全部楼层
#include<stdio.h>
void main()
{
        long int a=1,b=2;
        long int sum=0;
        for(a=1,b=2;a<4000000&&b<4000000;a=a+b,b=b+a)
        {
                if(a%2==0)
                        sum+=a;
                if(b%2==0)
                        sum+=b;
        }
        printf("%d\n",sum);
}

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

使用道具 举报

发表于 2019-3-7 23:15:17 | 显示全部楼层
#include<stdio.h>

int main(){
        int i=1;
        int j=2;
        int sum=0;
        A : if (i<=4000000&&j<=4000000)
        {
                if (i%2==0)
                {
                        sum+=i;
                }
               
                if (j%2==0)
                {
                        sum+=j;
                }
                i+=j;
                j+=i;
                goto A;
         }
         printf("%d\n",sum);
    return 0;
}
4613732
要是不用goto 好像循环不了,为啥呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-7 23:31:59 | 显示全部楼层
#include<stdio.h>

int main(){
        int i=1;
        int j=2;
        int sum=0;
        for (;i<=4000000&&j<=400000;i+=j,j+=i)
        {
                if (i%2==0)
                {
                        sum+=i;
                }               
                if (j%2==0)
                {
                        sum+=j;
                }
        }
        printf("%d\n",sum);
        return 0;
}
这个输出结果为257114。。。为啥呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-8 21:22:07 | 显示全部楼层
#include <stdio.h>
main()
{
        int i,j,num,sum;
        i=1;
        j=2;
        sum=2;
        do{
                num=i+j;
                i=j;     //2 3
                j=num;   //3 5
                if(num%2==0)
                {
                        sum=sum+num;
                }
        }while(num<=4000000);
        printf("斐波那契数列中数值不超过 4 百万的项中为偶数项的总和为%d\n",sum);
}


我算出的结果为:4613732

ps:想问一句 有答案吗 每个人发的代码都不太一样 有的人计算出来的结果也不太一样呢也不懂自己算的对不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-17 21:19:32 | 显示全部楼层
python
4613732


def p2():
    def fib(x,x1=1,x2=1):
        if x == 1 or x == 2:
            return x2
        else:
            return fib(x-1,x2,x1+x2)
    temp = 0
    n = 1
    while n:
        if fib(n)>=4000000:
            break
        if not fib(n)%2:
            temp += fib(n)
        n += 1
    print(temp)
    return
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-8 14:16:34 | 显示全部楼层
我算的是13504612,对吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-10 10:45:21 | 显示全部楼层
#include<cstdio>
using namespace std;
int main(){
    int a=1,b=2,c=0;
    long long sum=2;
    for(int i=1;c<=4000000;i++){
        c=a+b;
        if(c%2==0)
            sum+=c;
        a=b;
        b=c;
    }
    printf("%lld",sum);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-14 14:22:54 | 显示全部楼层
def w400_Fsum(a_1):
        r = a_1
        a = [0, 1]
        bb = 0
        u = 1
        tt = 0
        while (tt <= r):
                tt = a[1] + a[0]
                a.append(tt)
                a.pop(0)
                if not(a[1]%2) and (a[1] < r):
                        bb += a[1]

        return print(bb)

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

使用道具 举报

发表于 2019-6-25 17:26:56 | 显示全部楼层
a=input('\n   please input a nutural number   ');
x=1;
y=2;
s=0;
while i <= a
    i = x+y;
    x=y;
    y=i;
    if mod(i,2)==0
         s=s+i;
    end
end
disp(s+2);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-13 15:34:03 | 显示全部楼层
def fab(n):
    n1 = 1
    n2 = 1
    num =1
    while (n-2) > 0:
        num = n1+n2
        n1 = n2
        n2 = num
        n -= 1
    return num
num_list = []
num3 = 0
for num in range(1,100):
    num1 = fab(num)
    if num1 < 4000000:
        num_list.append(fab(num))
        #print(num_list[num-1])
for num2 in range(len(num_list)):
    if num_list[num2] % 2 == 0:
        num3 += num_list[num2]
print(num3)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-21 17:02:14 | 显示全部楼层
public static void main(String args[]){
        long i=1,j=2,count=2;
        long temp=0,total=2;
        while(count<4000000){
            temp=i+j;
            if(temp%2==0)
                total+=temp;
            i=j;
            j=temp;
            count++;
        }
        System.out.println(Long.valueOf(total));
    }
为什么数据类型是long和int的结果会不一样?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-21 18:55:15 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2020-4-18 12:55 编辑
sum=0
a=b=1

while b<4000000:
    if not b&1:
        sum+=b

    a,b=b,a+b

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

使用道具 举报

发表于 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
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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