考研机试 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]); } }
努力,向上,自律