题目4-7 斐波那契数列、跳台阶、矩形覆盖

题目:http://ac.jobdu.com/contest.php?cid=1039

这些题目的做法都很类似,所以放在一起写,都是同类型的递推题。题目4、5、7递推式其实都是斐波那契数列:f(n)=f(n-1)+f(n-2),其中的初值不同。题目6的递推式为f(n)=f(n-1)+f(n-2)+...f(0),由些可得f(n - 1) = f(n - 2) + f(n -3) + ...+f(0);所以可得:f(n) = 2*f(n - 1);都可以通过迭代直接求得!!注意题目的数据范围,可能会超int范围。所以用long long int!

以下给出第4题 和第6题 的AC代码!第4题、第5题、第7题的代码类似,只要更改一下初值就可以了!

 //第四题 源代码 
 #include <iostream>
 #include <cstdio>
 #include <string>
 #include <cstring>
 #include <cctype>
 #include <cstdlib>
 #include <string.h>
 #include <algorithm>
 #include <cmath>
 using namespace std;
 
 #define N 90
 #define LL long long int
 
 LL ans[N + 10];
 void generate()
 {
      int i;
      ans[0] = ans[1] = 1;
      for(i = 2;i <= N;i++)
            ans[i] = ans[i - 1] + ans[i - 2]; 
      return;
 }
 int main()
 {
     int n;
     generate();
     while(scanf("%d",&n) == 1)
     {
                          printf("%lld\n",ans[n]);//注意使用64位数
     }
     return 0;
 }
 
 //第六题源代码 
 #include <iostream>
 #include <cstdio>
 #include <string>
 #include <cstring>
 #include <cctype>
 #include <cstdlib>
 #include <string.h>
 #include <algorithm>
 #include <cmath>
 using namespace std;
 
 #define N 65
 #define LL long long int
 
 LL fib[N];
 
 void generate()
 {
      int i;
      fib[0] = fib[1] = 1;
      for(i = 2;i <= 50;i++)
            fib[i] = 2 *fib[i - 1];
 }
      
 int main()
 {
     int n;
     generate();
     while(scanf("%d",&n) == 1)
     {
                          printf("%lld\n",fib[n]);//注意用64位
     }
     return 0;
 }
     
     
 





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值