1. 程式人生 > >信了你的邪之杭電1005

信了你的邪之杭電1005

#include<stdio.h>//若用遞迴函式實現應該怎麼操作 
int main()
{
    int a,b,n,i,d,k;
    int s[51]={0,1,1};//定義長度為51,s[0],s[1],s[2]分別為0,1,1的陣列 
    while(scanf("%d%d%d",&a,&b,&n)!=EOF&&a+b+n)
    {
        for(i=3;i<52;i++)
        s[i]=(a*s[i-1]+b*s[i-2])%7;//對7取餘共有0到6這7種情況,a和b固定值,相乘再相加最多49種情況 
        for(i=3;i<52;i++)//最遲從50開始出現迴圈節 
        {
            if(s[i]==s[1]&&s[i+1]==s[2])
            break;
        } 
        //printf("%d\n",n);
        //printf("%d\n",i);
        if(n<i)//i和1的s值相同  
        printf("%d\n",s[n]);
        else
        {
           k=n;//用k來替換n,避免因改變原本輸入資料而造成不必要的麻煩 
           d=n/(i-1);//i-1為迴圈長度 
           k-=d*(i-1);
           printf("%d\n",s[k]);
        }
    }

http://acm.hdu.edu.cn/showproblem.php?pid=1005