#HDOJ-1005:Number Sequence
2018-04-10 13:07
363 查看
Number Sequence
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 192652 Accepted Submission(s): 48189
[align=left]Problem Description[/align]A number sequence is defined as follows:
f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.
Given A, B, and n, you are to calculate the value of f(n).
[align=left]Input[/align]The input consists of multiple test cases. Each test case contains 3 integers A, B and n on a single line (1 <= A, B <= 1000, 1 <= n <= 100,000,000). Three zeros signal the end of input and this test case is not to be processed.
[align=left]Output[/align]For each test case, print the value of f(n) on a single line.
[align=left]Sample Input[/align]1 1 3
1 2 10
0 0 0
[align=left]Sample Output[/align]2
5
这道题看起来就不是套公式递归或者迭代能做的了。数值很大,很有可能会超时或者内存不够。
看到式子里有一个mod 7 就说明f(n)的值一定是0~6之间,再代入算一遍样例里的值,发现有循环的,说明一定是在某个范围内循环的,但是这个范围就难找了。。。于是上网找了一个资料,发现很多人都能直接说是7 * 7 = 49,所以范围是0~49。但是这个7 * 7是怎么得来的呢?后面找到一个非常通俗易懂的解释
把相邻两个数组成一个group
则有
[ f(1), f(2) ]
[ f(2), f(3) ]
....
[ f(k), f(k+1) ]
因为 0 <= f(k) < 7,所以 [ f(k), f(k+1) ] 的组合是有限的(共49种可能)
必定存在最小的k,使得 [ f(k), f(k+1) ] 第二次出现(k <= 50,抽屉原理)
此时开始循环,所以循环周期一定 <= 49
作者:张雄骐
链接:https://www.zhihu.com/question/31593349/answer/52612435
因为f(n) = (A * f(n-1) + B *f(n-2))mod 7
在同一个样例中A和B是固定的了,f(n-1)和f(n-2)的值都在0~6之间,于是就有7 * 7种可能。
f(n-1)和f (n-2)这样构成一组,一共有49组。后面再出现的话,得到的结果也会在这49组里找到。
知道之后代码就非常好写了。import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int A;
int B;
int n;
int []f = new int[50];
while(sc.hasNext()){
A = sc.nextInt();
B = sc.nextInt();
n = sc.nextInt();
if(A < 1 & A > 1000 & B < 1 & B > 1000 & n < 1 & n > 100000000)
return;
if(A == 0 && B == 0 && n == 0)
return;
for(int i=1;i<50;i++){
if(i == 1 || i == 2)
f[i] = 1;
else
f[i] = ( A*f[i-1] + B*f[i-2] ) %7;
}
System.out.println(f[n%49]);
}
}
} 这题和编程没太大的关系,更多的是数学上的知识.
相关文章推荐
- hdoj1005 Number Sequence(找规律)
- 【hdoj1005】Number Sequence
- [HDOJ1005]Number Sequence
- HDOJ 1005 Number Sequence(规律)
- HDOJ 1005 Number Sequence
- Number Sequence(hdoj1005)
- HDOJ_1005_Number Sequence
- [热身题][hdoj_1005]Number Sequence
- hdoj 1005 Number Sequence
- [hdoj_1005]Number Sequence
- HDOJ 1005 Number Sequence
- HDOJ1005 Number Sequence
- 【hdoj1005】Number Sequence
- HDOJ_Problem Archive_1005_Number Sequence
- HDOJ 1005 Number Sequence
- hdoj 1005 Number Sequence
- ACM--DP--HDOJ 1005--Number Sequence
- HDOJ 1005 Number Sequence
- HDOJ 1005 Number Sequence 斐波那契找循环
- hdu/hdoj 1005 Number Sequence