1005:Number Sequence(hdu,數學規律題)
阿新 • • 發佈:2018-04-25
his arch ear iostream tput ostream htm 數據 long
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).
Output
For each test case, print the value of f(n) on a single line.
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.
Sample Input 1 1 3 1 2 10 0 0 0
Sample Output 2 5
Author CHEN, Shunbao
Source ZJCPC2004
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int f[4000]; 6 int a, b, n; 7 while (cin >> a >> b >> n, a != 0&& b != 0 && n != 0) 8 { 9 int i; 10 f[1] = 1, f[2] = 1; 11 for (i = 3; i < 500; i++) 12 { 13 f[i] = (a*f[i - 1] + b * f[i - 2]) % 7; 14 if (f[i] == 1 && f[i - 1] == 1) break; 15 } 16 i -= 2; 17 if(i > n) 18 { 19 cout << f[n] << endl; 20 continue; 21 } 22 n = n % i; 23 if (n == 0) n = i; 24 cout << f[n] << endl; 25 } 26 return 0; 27 }
大佬代碼:http://www.cnblogs.com/kuangbin/archive/2011/07/26/2117381.html
#include<stdio.h> int main() { //freopen("test.in","r",stdin); //freopen("test.out","w",stdout); int A,B,i; long n; int f[201]; f[1]=f[2]=1; while(scanf("%d %d %ld",&A,&B,&n)) { if(A==0&&B==0&&n==0) break; int cnt=0; for(i=3;i<=200;i++)//打表找到周期 { f[i]=(A*f[i-1]+B*f[i-2])%7; if(f[i]==1&&f[i-1]==1)break; if(f[i]==0&&f[i-1]==0){cnt=1;break;}//這裏有個小陷阱,如果A=7,B=7則後面都為0了 } if(cnt){printf("0\n");continue;} if(i>n){printf("%d\n",f[n]);continue;} i-=2;//i為周期 n%=i; if(n==0)n=i; printf("%d\n",f[n]); } return 0; }
這題完全參考大佬的代碼改良;
涼涼;;;;;;;;;
數據量小,一些不合適的沒在測試數據不在裏面
1005:Number Sequence(hdu,數學規律題)