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

来源:互联网 发布:d3.js demo 编辑:程序博客网 时间:2024/05/22 00:25
标题:斐波那契


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


    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);}}}



0 0
原创粉丝点击