这个题要想不超时,关键在于找到循环起始点与循环体长度。

题目描述

斐波那契数列,又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、…… 在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)。鹏鹏最近重新温习了一下斐波那契数列,然后他想到了一个问题,如果把数列的前两项写在一行,后面每个数字都是前两个数字的和,那么数列的第n个数字是几呢?例如,当前两项为0和1的时候,数列可以写成下面形式:011235813471123581347112358……

输入

 输入包含多组测试数据,每组数据为三个正整数a, b, n(0≤a, b < 10,0<n<10^9),分别代表数列的前两项和需要计算的项数。

输出

 


 

示例输入

0 1 3 0 1 7 1 1 8

示例输出

1 8 3

提示

 

来源

 qc

示例程序

#include <stdio.h>
int a[100];
int main()
{
   int s, b, n, i, c, j, x, y, z;
   while(scanf("%d%d%d",&s,&b,&n)!=EOF)
   {
       z = 0;
       a[0] = s;
       a[1] = b;
           for(i = 2; i < n; i++)
           {
               a[i] = a[i-1]+a[i-2];
               if(a[i]>=10)
               {
                   c = a[i];
                   a[i] = a[i] / 10;
                   a[i+1] = c % 10;
                   i++;
               }
               for(j = 0; j < i - 1; j++)
               {
                   if(a[i]==a[j+1]&&a[i-1]==a[j])
                   {
                       x = j;
                       y = i - 1 - j;
                       z = 1;
                       break;
                   }
               }
               if(z)
                break;
           }
           if(z==0)
            printf("%d\n",a[n-1]);
           else
            printf("%d\n",a[(n-1-x)%y+x]);
   }
    return 0;
}