杭电 1005
2014-08-23 16:08
369 查看
递归切记:
1.如果递归的次数大于100次,都很浪费时间,故应该考虑有没有什么规律;
2.递归时应该考虑循环节的情况。
对于此题,应当这么看:
由于最后的结果是模7的,故f
可能的值只有7个,0~6,由于f
是由f[n-1]和f[n-2]决定,故最大7*7=49次一个循环,只要找到两个连续的1出现,则可以确定为一次循环开始。
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 104494 Accepted Submission(s): 25339
Problem Description
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).
Input
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.
Output
For each test case, print the value of f(n) on a single line.
Sample Input
Sample Output
1.如果递归的次数大于100次,都很浪费时间,故应该考虑有没有什么规律;
2.递归时应该考虑循环节的情况。
对于此题,应当这么看:
由于最后的结果是模7的,故f
可能的值只有7个,0~6,由于f
是由f[n-1]和f[n-2]决定,故最大7*7=49次一个循环,只要找到两个连续的1出现,则可以确定为一次循环开始。
Number Sequence
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 104494 Accepted Submission(s): 25339
Problem Description
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).
Input
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.
Output
For each test case, print the value of f(n) on a single line.
Sample Input
1 1 3 1 2 10 0 0 0
Sample Output
2 5
#include<iostream> using namespace std; int main(){ int a,b; int n,f[50]; while(scanf("%d%d%d",&a,&b,&n)&&a&&b&&n){ int i,j; f[1]=1; f[2]=1; if(n<50){ for( i=3;i<=n;i++){ f[i]=(a*f[i-1]+b*f[i-2])%7; } cout<<f <<endl; } else{ for( i=3;i<50;i++){ f[i]=(a*f[i-1]+b*f[i-2])%7; if(f[i]==1&&f[i-1]==1) break; } j=n%(i-2); if(j==0) cout<<f[i-2]<<endl; else cout<<f[j]<<endl; } } return 0; }
相关文章推荐
- 杭电OJ1005题
- 杭电1005_Number Sequence
- 杭电oj-1005
- 杭电oj1005
- 杭电acm 1005
- 杭电1005—Number Sequence
- *杭电1005——Number Sequence(数学题)
- 杭电ACM1003,1004,1005 java解答
- 杭电1005 Number Sequence
- 杭电2017新生赛1005-整数的Alvin值
- 杭电OJ 1005
- Number Sequence(杭电1005)
- 杭电1005 Number Sequence(规律)
- 杭电acm-1005
- 杭电OJ1005 水过
- 【杭电】 1005 Number Sequence
- 杭电ACM刷题(2):1005,Number Sequence 标签: 杭电acmC语言 2017-05-11 22:43 116人阅读
- 杭电oj1005
- 2017杭电多校第三场1005 RXD and dividing(最大化k个斯坦纳树分块的最大权值和)HDU6060
- 杭电ACM OJ 1005 Number Sequence 简单却重要的公式题 完美考察了递归思想