鱼C论坛

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

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

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

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

使用道具 举报

发表于 2018-11-13 08:15:38 | 显示全部楼层
  1. n1 = 1
  2. n2 = 2
  3. sum = 2

  4. def fib(n1,n2):
  5.         n3 = n1 + n2
  6.         if n3 <= 4000000:
  7.                 if n3 % 2 == 0:
  8.                         global sum
  9.                         sum += n3
  10.                 return fib(n2,n3)
  11.         else:
  12.                 print('上一个数为:%s'%str(n2))
  13.                 print('现在已经到达 %s'%str(n3))
  14.                 print('目前总和为:%s'%str(sum))

  15. 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 | 显示全部楼层
  1. #include <stdio.h>
  2. main()
  3. {
  4.         int i,j,num,sum;
  5.         i=1;
  6.         j=2;
  7.         sum=2;
  8.         do{
  9.                 num=i+j;
  10.                 i=j;     //2 3
  11.                 j=num;   //3 5
  12.                 if(num%2==0)
  13.                 {
  14.                         sum=sum+num;
  15.                 }
  16.         }while(num<=4000000);
  17.         printf("斐波那契数列中数值不超过 4 百万的项中为偶数项的总和为%d\n",sum);
  18. }
复制代码



我算出的结果为: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 | 显示全部楼层
  1. def w400_Fsum(a_1):
  2.         r = a_1
  3.         a = [0, 1]
  4.         bb = 0
  5.         u = 1
  6.         tt = 0
  7.         while (tt <= r):
  8.                 tt = a[1] + a[0]
  9.                 a.append(tt)
  10.                 a.pop(0)
  11.                 if not(a[1]%2) and (a[1] < r):
  12.                         bb += a[1]

  13.         return print(bb)

  14. hi = 4000000
  15. 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 | 显示全部楼层
  1. public static void main(String args[]){
  2.         long i=1,j=2,count=2;
  3.         long temp=0,total=2;
  4.         while(count<4000000){
  5.             temp=i+j;
  6.             if(temp%2==0)
  7.                 total+=temp;
  8.             i=j;
  9.             j=temp;
  10.             count++;
  11.         }
  12.         System.out.println(Long.valueOf(total));
  13.     }
复制代码

为什么数据类型是long和int的结果会不一样?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

  3. while b<4000000:
  4.     if not b&1:
  5.         sum+=b

  6.     a,b=b,a+b

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 21:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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