题目: Number Sequence
题意:给一个递归式求这个数列的第n项
思路:%7,和当前项关联的只有前两项,显然这题是有循环的,{0,1,2,3,4,5,6}和{0,1,2,3,4,5,6}搭配最多只有49种情况,一旦超过必有重复,重复则开始循环
代码:
#pragma comment(linker, "/STACK:102400000,102400000")
#include "iostream"
#include "cstring"
#include "algorithm"
#include "cmath"
#include "cstdio"
#include "sstream"
#include "queue"
#include "vector"
#include "string"
#include "stack"
#include "cstdlib"
#include "deque"
#include "fstream"
#include "map"
using namespace std;
typedef long long LL;
const int INF = 0x1fffffff;
const int MAXN = 1000000+100;
int a,b,n;
int f[10000];
int main()
{
while(cin >> a >> b >> n && (a||b||n))
{
memset(f,0,sizeof(f));
f[1]=f[2]=1;
int c=1;
for(int i = 3 ; i < 10000 ; i++,c++)
{
f[i] = (a*f[i-1]+b*f[i-2])%7;
if(f[i] == 1 && f[i-1] == 1) //不得不说的是循环不一定从开头开始,不过这题恰好过了就不细想了
//如果从中间开始循环的话就要另外来一个for找到始点
break;
}
f[0] = f[c];
cout << f[n%(c)] << endl;
}
return 0;
}