zoukankan      html  css  js  c++  java
  • 求区间斐波那契数

    问题 : 来简单地数个数

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 14  解决: 6
    [提交][状态]

    题目描述

    这是一个斐波那契数列:
    f1 = 1
    f2 = 2
    fn = fn-1 + fn-2    (n>=3)
    蔡老板想知道,给你两个数 a、b,你能否求出在区间[a,b]里有多少个斐波那契数。

    输入

    多组数据输入。一行为一组输入数据,包括两个非负整数 a、b(a <= b <= 10^100),当a=b=0 时输入终止。

    输出

    对每组输入,输出单独一行,包含一个整数表示区间[a,b]里的斐波那契数个数。

    样例输入

    10 100
    1234567890 9876543210
    0 0
    

    样例输出

    5
    4
    

    提示

    #include<stdio.h> 
    #include<string.h> 
    #define N 1020 
    int fint[N][N]; 
    char fi[N][N]; 
    int s(char a[N],char b[N])
    { 
         int len=strlen(a); 
         int i; 
         for(i=0;i<len;i++)
         { 
         if((b[i]-'0')>(a[i]-'0')) 
         return 1;
         if((b[i]-'0')<(a[i]-'0'))     
          return 0; 
         } 
       return 2; 
    } 
    void change(int i)
     
    { 
        int j,m;
        for(j=0;j<=299;j++) 
        if(fint[i][j]!=0) 
        break;
      for(m=0;j<=299;m++) 
      { 
           fi[i][m]=fint[i][j]+'0';
           j++; 
      } 
    }
    void add(int fint[N][N],int i)
    { 
           int point=0,j; 
           for(j=299;j>=0;j--) 
           {         
          fint[i][j]=fint[i-1][j]+fint[i-2][j]+point;
            if(fint[i][j]>=10) 
            { 
                 fint[i][j]-=10;
                 point=1;
             } 
             else point=0;
        }
    }
     
    int main()
    { 
        int i,len,len1,len2,sum;
         char a[N],b[N];
         fint[1][299]=1; fint[2][299]=2;    
           for(i=3;i<=1000;i++) 
         add(fint,i);
          for(i=1;i<=1000;i++) 
          change(i);
           while(scanf("%s%s",a,b),a[0]!='0'||b[0]!='0') 
           { 
           sum=0;
            len1=strlen(a);
            len2=strlen(b);
            for(i=1;i<=1000;i++)
             { 
             len=strlen(fi[i]);
              if(len<len1||len>len2) 
              continue; 
              if(len>len1&&len<len2) 
              sum++;
               if(len1==len2)
               {
                 if(len1==len&&s(a,fi[i])>0&&s(fi[i],b)>0) 
                 sum++;
                  } 
                  else {
                     if(len==len1&&s(a,fi[i])>0) sum++;
                      else if(len==len2&&s(fi[i],b)>0) 
                      sum++; 
     }
     } 
     printf("%d
    ",sum); 
     } 
     return 0; 
     }

  • 相关阅读:
    .Net创建Windows服务完成批量导出功能(错误速查)
    WIN7 64位对Excel操作异常
    登陆优化的经验
    SQL 使用触发器常见错误
    CSS样式表优化
    JavaScript getMonth() 方法
    MVC架构 -- 初学试水<选课管理系统>
    触摸不到的天空
    嵌套 QQ、微博 通讯工具到HTML中
    CSS 实现样式下拉菜单
  • 原文地址:https://www.cnblogs.com/zyq1758043090/p/10003064.html
Copyright © 2011-2022 走看看