首页 > 代码库 > hdu 1005
hdu 1005
这题根据公式可以得出规律
当出现 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|1using 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;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。