杭电OJ 1005:Number Sequence

来源:互联网 发布:pdg2pdf mac 编辑:程序博客网 时间:2024/05/22 10:55

这个题目如果使用数组或者递归都会爆栈,注意到题目中的数都是对7取余,所以相邻的两个数的组合最多有49中,所以最多49次循环就会从头开始循环,这是就可以不用继续执行了,然后将n对i取余,根据余数就可以得到结果。

C++代码:

#include<stdio.h>const int N=55;int dp[N];int getRes(int A,int B,int n){if(n==1||n==2)return 1;else{dp[1]=1;dp[2]=1;int i;for(i=3;i<=N;i++){dp[i]=(A*dp[i-1]+B*dp[i-2])%7;if(dp[i]==dp[i-1]&&dp[i-1]==1)break;}i-=2;n=n%i;if(n)return dp[n];elsereturn dp[i];}}int main(){int a,b,n;while(scanf("%d%d%d",&a,&b,&n)!=EOF){if(a==0&&b==0&&n==0)return 0;printf("%d\n",getRes(a,b,n));}return 0;}


1 0