标签:blog os io for ar div 代码 amp
这题根据公式可以得出规律
当出现 1 1时 表示达到循环节点
因此可以打表求余得出结果
但是至于为什么49 是最大周期
找到了点资料是说
每个数是有前两个数来决定
而数的结果只有0 到6 七种可能
因此是 7*7=49
只能意会了 而且还出现了奇怪的bug 把for循环换成while就一直wa
如果只有49次不是应该break的吗 为什么会re
#include<stdio.h> #include<string.h> #include<math.h> #include<iostream> #include<algorithm> #include<queue> #include<stack> #define mem(a,b) memset(a,b,sizeof(a)) using namespace std; int arr[10000]; int main() { arr[1]=arr[2]=1; int a,b,n; while(cin>>a>>b>>n,a||b||n) { int i; for(i=3;i<10000;i++) { arr[i]=(a*arr[i-1]+b*arr[i-2])%7; if(arr[i]==1&&arr[i-1]==1) break; } n=n%(i-2); arr[0]=arr[i-2]; cout << arr[n] << endl; } return 0; }
以下是re代码
#include<stdio.h> #include<string.h> #include<math.h> #include<iostream> #include<algorithm> #include<queue> #include<stack> #define mem(a,b) memset(a,b,sizeof(a)) #define ll __int64 #define MAXN 1000 #define INF 0x7ffffff #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 using namespace std; int num[10000]; int main() { num[1]=1; num[2]=1; int i,j; int a,b,que; int flag; while(scanf("%d%d%d",&a,&b,&que)!=EOF) { if(a==0&&b==0&&que==0) break; i=3; while(1) { num[i]=(a*num[i-1]+b*num[i-2])%7; if(num[i]==1&&num[i-1]==1) break; i++; } flag=i-2; if(que%flag) printf("%d\n",num[que%flag]); else printf("%d\n",num[flag]); } return 0; }
标签:blog os io for ar div 代码 amp
原文地址:http://www.cnblogs.com/sola1994/p/3923647.html