HDU 1005 Number Sequence

方法一

#include<stdio.h>
int main
()
{
     int a,b,n;
   
while
(scanf("%d %d %d",&a,&b,&n)!=EOF&&(a+b+n)!=0
)
{
 
int
f1=1,f2=1,f3=1,t,r[8][8]={0},i,flag=0,x;
       
  for
(i=3;i<=n;i
++)
  {
      f3=(a*f2+b*f1)%7;      
        r[f1][f2]=i;           
   f1=f2; f2=f3;
           
    if
(r[f1][f2]&&flag==0
)
    {
              
      t=i-r[f1][f2]+1;              
        i=r[f1][f2]-3;      
     
   n=(n-i)%t+i;
         
      if
(n==i) n=t+i;
                
     if
(n==(i+1)) {f3=f1;break;}
  
          if
(n==(i+2)) {f3=f2;break;}             
          i+=2;         
         flag=1
;            
       }  
          
  }
        
     printf("%d\n",f3
);    
  }
    
  getchar();
  getchar
();
}

方法二

#include<stdio.h>
#include<string.h>
int main()
{
    int a,b,n,i;
    while(1)
    {
        scanf("%d%d%d",&a,&b,&n);
   if(a==0&&b==0&&n==0) break;
   int f[1009];
   f[1]=1;f[2]=1;
   for(i=3;i<=1008;i++)
   {
   
    f[i]=(a*f[i-1]+b*f[i-2])%7;
   
   
   }
   printf("%d\n",f[(n-1)%1008+1]);
}
return 0;
}

posted @ 2010-09-08 22:35  CoderZhuang  阅读(125)  评论(0编辑  收藏  举报