hdoj-1005 找规律

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

第一眼感觉这道题应该用递归,太简单了。但是事情肯定不会像想象中那么简单,Memory Limit Exceeded出现了,再仔细的去分析下题目,N实在是太大了

那么这道题目,应该是有规律可循。这个序列总是跟前两个数相关,那么只要出现相同连续的两个数就肯定会有重复。而被7除的余数只能是0-6,两个的序列是49,即最大循环周期是49.。49次过后肯定会出现重复,那么N大于49的部分就不用计算了,直接代入N%7就行了。

下面是java的实现

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner ss=new Scanner(System.in);
        short a=ss.nextShort();
        short b=ss.nextShort();
        int n=ss.nextInt();
        while (a!=0 && b!=0 && n!=0) {
            System.out.println(f(n%49, a, b));
            a=ss.nextShort();
            b=ss.nextShort();
            n=ss.nextInt();
        }
        ss.close();
    }
    private static byte f(int n,short a,short b)
    {
        if(n==1)
            return 1;
        if(n==2)
            return 1;
        return (byte)((f(n-1, a, b)*a+f(n-2, a, b)*b)%7);
    }
}
时间: 2024-12-19 16:24:47

hdoj-1005 找规律的相关文章

找规律/数位DP HDOJ 4722 Good Numbers

题目传送门 1 /* 2 找规律/数位DP:我做的时候差一点做出来了,只是不知道最后的 is_one () 3 http://www.cnblogs.com/crazyapple/p/3315436.html 4 数位DP:http://blog.csdn.net/cyendra/article/details/11606209 5 */ 6 #include <cstdio> 7 #include <iostream> 8 #include <algorithm> 9

hdoj 2277 Change the ball 【找规律】

题目大意:有三不同颜色的球(yellow,blue, red),每两个不同颜色的球在一起就会变成剩下的种的颜色,例如,1个y,1个b 在一起就变成了两个r的.求能不能将给出的三种颜色的球都变成同一种颜色,如果能输出最少的转换步数. 策略:这道题假设有相同的那么显然就是相同的数目,如果没有相同的,如果能转化同一个颜色,那么必有(s - n)%3 == 0,即两种颜色的球的个数差,是3的倍数(仔细想一下),所以 我们排一下序,依次判断就可以了 题目链接 点击打开链接 代码: #include<std

hdoj 1097 A hard puzzle 【找规律】

题目大意:求a^b的最右边的数. 这道题是有规律的 解题报告: http://blog.csdn.net/shengweisong/article/details/38024619  但是注意数据很大,要用64位的整型,被坑了一次.. 题目链接:点击打开链接 代码: #include<stdio.h> int main() { __int64 n, m, i; while(scanf("%I64d%I64d", &n, &m) == 2){ __int64

HDOJ 5351 MZL&#39;s Border 找规律

打出前i个串的kmp的fail指针: p: ab 0 0 0 p: aba 0 0 0 1 p: abaab 0 0 0 1 1 2 p: abaababa 0 0 0 1 1 2 3 2 3 p: abaababaabaab 0 0 0 1 1 2 3 2 3 4 5 6 4 5 p: abaababaabaababaababa 0 0 0 1 1 2 3 2 3 4 5 6 4 5 6 7 8 9 10 11 7 8 p: abaababaabaababaababaabaababaabaab

HDOJ 题目4349 Xiao Ming&#39;s Hope(找规律)

Xiao Ming's Hope Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1515    Accepted Submission(s): 1015 Problem Description Xiao Ming likes counting numbers very much, especially he is fond of co

hdoj 2047 阿牛的EOF牛肉串 【找规律】

这道题再一次证明找规律真不是我的强项.... 阿牛的EOF牛肉串 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 20312    Accepted Submission(s): 9528 Problem Description 今年的ACM暑期集训队一共有18人,分为6支队伍.其中有一个叫做EOF的队伍,由04级的阿牛.XC以及05级

hdoj 1097 A hard puzzle (找规律)

A hard puzzle                            T   ime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 29231    Accepted Submission(s): 10494 Problem Description lcy gives a hard puzzle to feng5166,lwg,JG

找规律/hdu 1005 Number Sequence

题意 给出a,b,n,已知f[1]=f[2]=1,f[i]=(a*f[i-1]+b*f[i-2]) mod 7 输出f[n] 数据范围 1 <= A, B <= 1000, 1 <= n <= 100,000,000 分析 首先,直接求..肯定是不行的 会tle 会mle 但是可以找到规律,例如对a=1,b=1 这个数据,有 f1=1 f2=1 f3=3 f4=5 f5=4 f6=0 f7=1 f8=1 f9=3 f10=5 f11=4 f12=0 ???? 我们会发现有一定的规律

HDOJ 1248 寒冰王座(找规律)

[思路]:找规律,参考的别人的,自己写的挂了.http://blog.csdn.net/appte/article/details/8227632 [AC代码]: #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> using namespace std; int main() { //freopen("in.txt", "r&q

1005:取余,循环,找规律

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