HDOJ 1005 Number Sequence 斐波那契找循环

来源:互联网 发布:手机商城html源码 编辑:程序博客网 时间:2024/06/02 22:33

循环的条件是存在

i,j

a[i-1]=a[j-1];

a[i]=a[j];

而连续的两个数情况共有49种;

注意循环不一定总从1 1开始

例如输入为

2 7

 

#include"stdio.h" main() {       int A,B,n,a[50],i,j,start,length;       while(scanf("%d%d%d",&A,&B,&n)&&(A||B||n))       {               a[1]=1;               a[2]=1;               for(i=3;i<51;i++)                {                         a[i]=(A*a[i-1]+B*a[i-2])%7;                      for(j=2;j<i;j++)                      {                                  if(a[j-1]==a[i-1]&&a[j]==a[i])                                  {                                           start=j; length=i-j;                                           break;                                  }                     }               }               if(n<start)printf("%d\n",a[n]);               else printf("%d\n",a[start+(n-start)%length]);       }       return 0; }