信了你的邪之杭電1005
阿新 • • 發佈:2019-02-09
#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