Loading

考研机试 21.递推数列

 

时间:2021/03/05

 

一.题目描述

给定a0,a1,以及an=p*a(n-1) + q*a(n-2)中的p,q。这里n >= 2。 求第k个数对10000的模。

输入描述

输入包括5个整数:a0、a1、p、q、k。

输出描述

第k个数a(k)对10000的模。

题目链接

https://www.nowcoder.com/practice/d0e751eac618463bb6ac447369e4aa25?

tpId=40&tqId=21352&rp=1&ru=%2Fta%2Fkaoyan&qru=%2Fta%2Fkaoyan%2Fquestion-ranking&tab=answerKey

 

二.算法

题解

类似于斐波那契数列数列的计算过程,通过辅助数组将递归转换为循环,大大降低算法的时间复杂度。

代码

import java.util.Scanner;

public class Main{
    
    public static void main(String[] args){
        
        //读取输入
        Scanner in = new Scanner(System.in);
        int a0 = in.nextInt();
        int a1 = in.nextInt();
        int p = in.nextInt();
        int q = in.nextInt();
        int k = in.nextInt();
        
        //定义辅助数组
        int[] a = new int[k + 1];
        a[0] = a0;
        a[1] = a1;
        
        //计算ak
        for(int i = 2; i <= k; i++){
            a[i] = (p * a[i - 1] + q * a[i - 2]) % 10000;
        }
        
        //输出ak的值
        System.out.println(a[k]);
    }
}

 

posted @ 2021-03-05 18:47    阅读(51)  评论(0编辑  收藏  举报