【蓝桥杯】研究兔子的土豪(Java实现)


/* 程序问题注释开始

  • 程序的版权和版本声明部分

  • Copyright © 2020,湖南工程职业技术学院信息工程学院学生

  • 文件名称: 蓝桥杯赛题

  • 作 者: 李 斌

  • 完成日期: 2020 年 04 月 30日

  • 对任务及求解方法的描述部分

  • 问题描述
      某天,HWD老师开始研究兔子,因为他是个土豪,所以他居然一下子买了一个可以容纳10^18代兔子的巨大笼子(好像比我们伟大的地球母亲大一点点?),并开始研究它们,之后,他了解了兔子的繁衍规律:即fibonacci数列。
      兔子繁殖了n代后,HWD老师很开心。
      但是,HWD老师有密集恐惧症,所以,他只能去卖了兔子,他找到了一个好的雇主,但是这个雇主有强迫症,他只每次收购1007只兔子,HWD老师为了避免自己的密集恐惧症,要尽量多的卖了兔子。
      但是即便是密集恐惧症,也打击不了HWD老师研究兔子的决心,他数着数着自己剩下的兔子……

  • 输入格式
      HWD老师让兔子繁衍了几代(一个整数,没有其他字符)。

  • 输出格式
      HWD老师剩余(残余?)的兔子(一个整数,忽略行尾回车及空格)。

  • 样例输入
      1

  • 样例输出
      1

  • 数据规模和约定
      兔子的总量最大时小于HWD老师笼子的大小。
      f[1]=1,f[2]=1,f[3]=2 ……

  • 程序问题注释结束

*/


import java.util.Scanner;
public class Main {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		Scanner in=new Scanner(System.in);
		//用户请输入兔子繁殖的代数
		long num=in.nextLong();
		//108正好一个轮回余数为0
		num=num%108;
		//兔子的代数繁殖初始顺序
		int a=1,b=1;
		//每代兔子之和
		long sum=2;
		//循环兔子代数
		for(int i=2;i<num;i++)
		{
			//保留前该项
			int temp=b;
			//后一项等于前两项之和
			b=(a+b)%1007;
			//前一项等于后一项
			a=temp;
			//取余1007求余数
			sum = b;
		}
		//判断是否为第一代或者第二代
		if(num==1||num==2)
		{
			//第一代和第二代都为1
			sum=1;
		}
		//输出余数
		System.out.println(sum%1007);
	}

}

运行结果:
【蓝桥杯】研究兔子的土豪(Java实现)_第1张图片

你可能感兴趣的:(【蓝桥杯】研究兔子的土豪(Java实现))