hdu 1005 Number Sequence
这个题目跟1021 Fibonacci Again相似很多(都是跟“%”相关的啦),还是每步取余,不过看似n有点大,可能会超时吧(没试。。。)
还来看可爱的“%”,前两个数决定第三个数,对7取余,前两个数可以去0~7,总共49中情况,也就是说49个数以内定会循环
我是考虑了直接从第一个数开始循环,有人会说会不会从中间开始循环。。。这个倒证明,不过第一个开始循环的话包含了中间情况了(主要是懒得想了。。)
1 #include<stdio.h>
2 int main()
3 {
4 int a,i,b,n,f[50]={0},k;
5 while(scanf("%d%d%d",&a,&b,&n)&&a&&b&&n)
6 {
7 f[1]=f[2]=1;
8 k = 2;
9 for(i=3;i<=50;i++)
10 {
11 f[i] = (a*f[i-1]+b*f[i-2])%7;
12 if(f[i]==1&&f[i-1]==1)break;
13 k++;
14 }
15 f[0] = f[k-1];
16 if(n==1||n==2) printf("1\n");
17 else printf("%d\n",f[n%(k-1)]);
18
19 }
20 return 0;
21 }