本文主要是介绍杭电OJ 1005:Number Sequence,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这个题目如果使用数组或者递归都会爆栈,注意到题目中的数都是对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;
}
这篇关于杭电OJ 1005:Number Sequence的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!