1005:Number Sequence(hdu,数学规律题)

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

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;   

}    

这题完全参考大佬的代码改良;

凉凉;;;;;;;;;

数据量小,一些不合适的没在测试数据不在里面

原文地址:https://www.cnblogs.com/kangdong/p/8934439.html

时间: 2024-10-10 02:13:27

1005:Number Sequence(hdu,数学规律题)的相关文章

HDU 1005 Number Sequence (数学规律)

Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 104190    Accepted Submission(s): 25232 Problem Description A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A

HDU 1005 Number Sequence(数论)

HDU 1005 Number Sequence(数论) 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

uva10706 - Number Sequence(找规律)

题目:uva10706 - Number Sequence(找规律) 题目大意:有这样一串序列11212312341234512345612345671234567812345678912345678910123456789101112345678910...,问第i个位置数的值. 1  2     3       4          5            6              7               ... 解题思路:这题需要发现规律.我一开始还看错题意了.规律是看了别人

【算法学习笔记】73.数学规律题 SJTU OJ 1058 小M的机器人

Description 小M有很多个机器人,他们要么一直说真话,要么一直说假话. 然后每个人都说: (1). 不到N个人比我工作得多 (2). 至少M个人的工资比我高. 保证没有两个人的工作一样重,也没有两个人的工资一样高,问至少有多少机器人? Input Format 一行两个数整数N, M (  1≤N,M < 2^31) Output Format 一个整数K表示至少有K个人 Hint 想不出来的同学... 不要想得太复杂了... Sample Input 2 2 Sample Outpu

HDU 1005 Number Sequence 数学

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 cont

HDU 1005 Number Sequence【多解,暴力打表,鸽巢原理】

Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 175657    Accepted Submission(s): 43409 Problem Description A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A

HDU ACM 1005 Number Sequence

Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 119732    Accepted Submission(s): 29072 Problem Description A number sequence is defined as follows:f(1) = 1, f(2) = 1, f(n) = (A

HDU 1005 Number Sequence 矩阵乘法 Fib数列

原题: http://acm.hdu.edu.cn/showproblem.php?pid=1005 题目大意: 按规律求出第n项. 由矩阵乘法我们可以知道: 所以对于fib数列我们可以用矩阵来求,由于矩阵可以左乘右乘,所以我们可以用快速幂来优化. #include<iostream> #include"string.h" #include<stdio.h> using namespace std; const int bc=2; const int mod =

(模板题)Number Sequence -- Hdu -- 1711

http://acm.hdu.edu.cn/showproblem.php?pid=1711 Number Sequence Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 16080    Accepted Submission(s): 7100 Problem Description Given two sequences of n