当前位置: 代码迷 >> C语言 >> C语言练习求助
  详细解决方案

C语言练习求助

热度:277   发布时间:2008-03-14 17:40:14.0
C语言练习求助
我今天遇到一道C语言题目,知道要用到“高精度算法”,可是具体的算法及程序我不知道怎么来实现,希望哪位高手能帮帮我的忙。
   题目如下:
    Fibonacci数列问题
背景:
Fibonacci 数列有如下特点:其第 1 , 2 项均为 1 , 1 。从第 3 个数开始,该数是其前两个数之和 . 即 :


F1=1 (n=1)
F2=1 (n=2)
Fn=Fn-1+Fn-2 (n>=3)
请你编写一个函数 fun ,它的功能是:对于一个给定的 数( N ), 求不大于 N 的最大 Fibonacci 数。

输入

输入的第一行是一个正整数,表示下面有几组数据需要计算。之后的每一行是一个数据 N ,其中 1 < N <= 101000 。

输出

对应输入的每一行,输出一个 不大于 N 的最大 Fibonacci 数。


  测试输入 期待的输出 时间限制 1秒  内存限制 20480KB

测试用例 0 以文本方式显示
1: 2
2: 9
3: 1234567890
以文本方式显示
1: 8
2: 1134903170
搜索更多相关的解决方案: C语言  Fibonacci  练习  算法  

----------------解决方案--------------------------------------------------------
在论坛上翻一翻.
----------------解决方案--------------------------------------------------------
我这个能算了,但是肯定不满足你的条件..你改一下
#include "stdio.h"
#include"malloc.h"
int fabc(int n)
{
    if(n==1||n==2)
        return 1;
    else
        return fabc(n-1)+fabc(n-2);
}
long* exam( int i)
{   long  *a=(long *)malloc(sizeof(long)*i);
    int n=1;
    for(int j=0;j<i;j++)
    {   printf("%d:  ",j+2);
        scanf("%d",a+j);
        fflush(stdin);
        
    }
    for(j=0;j<i;j++)
    {
        while(*(a+j)>fabc(n))
            n++;
        a[j]=fabc(n-1);
        n=1;
    }
    return a;
}
int  main()
{   
    int n;
    long *p;
    printf("1:  ");
    scanf("%d",&n);    
    fflush(stdin);
    p=exam(n);
    for(int i=0;i<n;i++)
    {
        printf("%ld   %ld\n",i+1,*(p+i));
    }
    return 1;
}
----------------解决方案--------------------------------------------------------
  相关解决方案