数字序列
2016-05-17 21:33
162 查看
思路:由于数字序列与7作模运算(mod7),而且每个数只与前面紧邻的两个数有关,因此,最多7*7次之后序列会出现环,也即是50次之内必然出现环,因此可先求出前50次的子序列的值,然后通过比较判断出现环的起始及结束位置,以此为基础将n的值等价于前50次内某个值。本代码在求环起始与结束位置时,使用nums[i]*7+nums[i+1]记录,当再次出现该值时,则表示该值为环的起始位置,环的大小为当前出现该值的位置减去第一次出现该值的位置
#include<iostream> #include<cstring> #include<algorithm> using namespace std; int nums[51]={1,1}; int num1[51]; int main() { int A,B,n; while(scanf("%d%d%d",&A,&B,&n)==3&&(A!=0||B!=0||n!=0)) { int m=min(50,n); for(int i=2;i<m;i++) { nums[i]=(A*nums[i-1]+B*nums[i-2])%7; } if(n<=50) { printf("%d\n",nums[n-1]); } else { memset(num1,-1,sizeof(num1)); int rec; int index; for(int i=0;i<49;i++) { int num=nums[i]*7+nums[i+1]; if(num1[num]!=-1) { index=num1[num]; rec=i-num1[num]; break; } else { num1[num]=i; } } int result=nums[index+(n-index-1)%rec]; printf("%d\n",result); } } return 0; }
相关文章推荐
- cccc PAT 1023组个最小数
- Spring的IOC的解析
- HashMap的默认容量和加载因子
- python笔记之ArcPy简介
- [Book Note] Haskell: Functor & Applicative
- 第一个程序HelloWord
- hdu4638 莫对算法 离线区间查询(非更新)
- hdu1116 欧拉图的判定(点的度数的判定+用并查集/dfs对连通图的判定)
- [线性代数] 矩阵#1
- {sharepoint} Setting List Item Permissions Programatically in sharepoint
- Socket TCP
- 【MyBatis框架点滴】——mybatis插入数据返回主键(mysql、oracle)
- 51CTO第一篇博客
- 【POJ 2409】 Let it Bead(Polya)
- 栈和队列基础知识
- 栈优化最大流-HDU-4280-Island Transport
- XML解析的两种方式DOM和SAX
- 浅谈健商
- 欢迎使用CSDN-markdown编辑器
- 叠罗汉I&叠罗汉II