杭电OJ(HDOJ)1005题:Number Sequence(规律递推)
2014-11-29 19:06
483 查看
题意:
有这样一个序列f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.输入三个整数:A,B,N (1 <= A, B <= 1000, 1 <= n <= 100,000,000),求出序列中第N个数是多少。A,B,N同时为0结束。
示例输入:
1 1 3
1 2 10
0 0 0
示例输出:
2
5
解决方案:
f(n)=(A*f(n-1)+B*(f-2))%7,计算过程中A和B的一直没有变,在变的是f(n-1)和f(n-2)。f(n)取决于前两个元素f(n-1),f(n-2),最终的结果与7相模除,f(n-1)的取值范围为[0,6],同样f(n-2)的取值范围也是[0,6],两个数的组合为(0,0),(0,1)(1,1)......(6,6)一共有7*7=49种不同的组合,但A,B的值固定不变,第49个元素之后又会重覆,然后继续下去。所以只要纪录前49个元素的值就可以。
有这样一个序列f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.输入三个整数:A,B,N (1 <= A, B <= 1000, 1 <= n <= 100,000,000),求出序列中第N个数是多少。A,B,N同时为0结束。
示例输入:
1 1 3
1 2 10
0 0 0
示例输出:
2
5
解决方案:
f(n)=(A*f(n-1)+B*(f-2))%7,计算过程中A和B的一直没有变,在变的是f(n-1)和f(n-2)。f(n)取决于前两个元素f(n-1),f(n-2),最终的结果与7相模除,f(n-1)的取值范围为[0,6],同样f(n-2)的取值范围也是[0,6],两个数的组合为(0,0),(0,1)(1,1)......(6,6)一共有7*7=49种不同的组合,但A,B的值固定不变,第49个元素之后又会重覆,然后继续下去。所以只要纪录前49个元素的值就可以。
#include<stdio.h> int main() { int a,b,n,i,arr[49]={1,1}; while(scanf("%d%d%d",&a,&b,&n)&&(a|b|n)) { for(i=2;i<49;i++) arr[i]=(a*arr[i-1]+b*arr[i-2])%7; printf("%d\n",arr[(n-1)%49]);//数组下标从0开始,所以n先减1 } return 0; }
相关文章推荐
- HDOJ 1005 Number Sequence规律题
- 杭电OJ(HDOJ)2041题:超级阶梯(规律递推,Fibonacci)
- 杭电1005Number Sequence
- Number Sequence(杭电1005)
- Number Sequence_hdu_1005(规律)
- HDOJ1005:Number Sequence 快速数组幂
- hdoj1005--Number Sequence
- 【HDOJ】1005 -> Number Sequence
- HDOJ(1005) Number Sequence
- ACM—Number Sequence(HDOJ1005)
- 杭电ACM(1005)Number Sequence
- HDU 1005:Number Sequence【规律】
- (HDOJ 1005)Number Sequence
- 递推:Number Sequence(mod找规律)
- HDOJ&nbsp;&nbsp;1005&nbsp;&nbsp;&nbsp;Number&nbsp;Sequence
- 【杭电oj】1005 - Number Sequence(找规律)
- Number Sequence_hdu_1005(规律)
- hdu1005 Number Sequence寻找规律题
- HDU 1005 Number Sequence(找规律)
- Number Sequence 【杭电-1005】 附题+详解