第五届蓝桥杯软件类省赛真题 Java本科A 斐波那契

本文介绍了一种解决斐波那契数列求和并进行多次取模问题的方法,包括递归实现、求和过程以及最终对特定值求模的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

标题:斐波那契


    斐波那契数列大家都非常熟悉。它的定义是:


    f(x) = 1                    .... (x=1,2)
    f(x) = f(x-1) + f(x-2)      .... (x>2)


    对于给定的整数 n 和 m,我们希望求出:
    f(1) + f(2) + ... + f(n)  的值。但这个值可能非常大,所以我们把它对 f(m) 取模。
    公式参见【图1.png】


    但这个数字依然很大,所以需要再对 p 求模。


【数据格式】
输入为一行用空格分开的整数 n m p (0 < n, m, p < 10^18)
输出为1个整数


例如,如果输入:
2 3 5
程序应该输出:
0


再例如,输入:
15 11 29
程序应该输出:
25


资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗  < 2000ms




请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。


所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。

注意:主类的名字必须是:Main,否则按无效代码处理。




取模其实就是 取 余数的意思。


代码如下:

import java.util.*;

public class Main {
	public static void main(String args[]){
		Scanner  s = new Scanner(System.in);
		int n,m,p;
		n = s.nextInt();
		m = s.nextInt();
		p = s.nextInt();
		int sum = 0;
		
		for(int i = 1;i <= n;i++){     //f(0)+...+f(n)
			sum = sum + fun(i);
		}
		
		int fm = fun(m);
		
		int result = sum%fm;
		
		result = result%p;
		
		System.out.print(result);
		
	}
		
	public static int fun(int n){	 //递归实现 f(n)
		if(n<=2){
			return 1;
		}else{
			return  fun(n-1) + fun(n-2);
		}	
	}

}



### 关于第十二届蓝桥杯 Java 题目及解析 对于第十二届蓝桥杯 Java的具体题目及其解析,目前并未提供直接的引用支持。然而,基于以往事的特点以及常见的考察知识点[^1],可以推测该年度的比可能涉及以下几个方面: #### 常见考点分析 1. **基础算法** 蓝桥杯通常会测试选手的基础编程能力,比如数组操作、字符串处理等。例如,在往年的比中曾有似的题目要求计算特定条件下的子串数量或者统计字符频率。 2. **数据结构应用** 数据结构的应用也是重要部分之一,堆栈(Stack)、队列(Queue)甚至是链表(LinkedList)都可能出现作为解题工具的选择依据。一道典型的数据结构运用实例便是利用栈来解决括号匹配问题[^2]。 3. **动态规划与递归思维** 动态规划(DP)递归是竞中的高频主题。参者需掌握如何定义状态转移方程并有效实现它。举个例子来说就是斐波那契数列的不同变种形式经常被用来检验学生对这两种方法的理解程度。 4. **大整数运算** 如您提到的情况一样,当遇到超出基本型范围的大数值时,BigInteger成为必需品。这试题旨在评估考生能否灵活应对极端情况而不局限于简单型的局限性。 5. **模拟过程** 某些题目需要精确模仿某个具体流程或机制的行为模式。此问题往往不依赖复杂的理论知识而是考验耐心细致地按照描述一步步构建解决方案的能力。 以下是针对上述几个方向的一个简化版代码示例展示: ```java import java.math.BigInteger; public class Example { public static void main(String[] args){ // 大整数相加演示 String numStr1 = "9876543210"; String numStr2 = "123456789"; BigInteger bigInt1 = new BigInteger(numStr1); BigInteger bigInt2 = new BigInteger(numStr2); System.out.println(bigInt1.add(bigInt2)); // 输出两者之 } } ``` 尽管无法给出确切的历年真题原文,但从以上总结可以看出准备策略应围绕这些核心领域展开深入学习实践。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值