zoukankan      html  css  js  c++  java
  • 湖大训练赛第三场 Gibonacci number

    题目来自于浙江大学第13届校赛

    zoj3702:

    题意:给定一个数列G,G[0] = 1; G[1] 是一个随机数,然后从G[2] 开始  G[I] = G[I-1] + G[I-2]  (  I>= 2)

    然后给定一个I ,G[I],J 求G[J] 的值

    解题思路:这个数列中的每一个值都可以用G[I] = XG[0] + YG[1];

    表示,而X,Y这两个系数发现可知又正好是一个斐波那契数列,所以可以求出G[1]是多少 然后求得 G[J] 的值

    解题代码:

    View Code
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    long long int a[30];
    long long int b[30];
    long long int g[30];
    int main()
    {
        int t ;
    
        a[0] = 0; 
        a[1] = 1;
        b[0] = 0;
        b[1] = 0;
        b[2] = 1;
        for(int i = 2;i <= 20;i ++)
        {
            a[i] = a[i-1]+a[i-2];
        }
        for(int i = 3 ;i <= 20 ;i ++)
        {
           b[i] = b[i-1] +b[i-2];
        }
        scanf("%d",&t);
        while(t--)
        {
          long long  int i,j,k;
           memset(g,0,sizeof(g));
           scanf("%lld %lld %lld",&j,&k,&i);
             
             g[0] = 1;
             if((k-b[j] != 0) && (k-b[j]) % a[j] ==0)
             g[1] = (k-b[j])/a[j];
             else 
             {
               printf("-1\n");
               continue;
             }
             for(int i = 2;i <= 20 ;i ++)
             {
               g[i] = g[i-1]+g[i-2];
             }
          /*for(int i = 1;i <= 20 ;i ++)
              printf("%d ",g[i]);
          printf("\n");*/
          printf("%lld\n",g[i]);
        }
        return 0;
    }
    没有梦想,何谈远方
  • 相关阅读:
    Guava的学习2
    Guava的学习1
    数据结构
    二叉搜索树的第k个结点
    滑动窗口的最大值
    僵尸进程和孤儿进程
    fork和vfork,exec
    扑克牌顺子
    字符流中第一个不重复的字符
    表示数值的字符串
  • 原文地址:https://www.cnblogs.com/zyue/p/3067912.html
Copyright © 2011-2022 走看看