您的位置:首页 > 产品设计 > UI/UE

HDU 1005 Number Sequence

2013-08-08 10:47 447 查看
题意:给出一个递推式f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7 中的A,B和n,让你输出f(n)。

分析:找循环节。以为f(n)是由f(n-1),f(n-2)推出的,而且f(n)<7,所以组合起来最多有7*7共49种。f(1)=f(2)=1,所以可以以1,1作为循环节的头部来找循环节。(但以1,1作为循环节的头部作为循环节的头部是有问题的,但打表来看虽然有问题,但并不影响这种方法最终结果的正确性)

Code:

#include <algorithm>
#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <vector>
#include <queue>
#include <cmath>
#include <map>
#include <set>
#define eps 1e-7
#define LL long long
#define pb push_back
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
using namespace std;

int f[55];

int main()
{
int a,b,n,i;
f[1]=f[2]=1;
while(scanf("%d %d %d",&a,&b,&n),a+b+n){
for(i=3;i<50;i++){
f[i]=(a*f[i-1]+b*f[i-2])%7;
if(f[i]==1&&f[i-1]==1) break;
}
i-=2;
n%=i;
if(!n) printf("%d\n",f[i]);
else printf("%d\n",f
);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: