初学Java基础Day09---不死神兔,方法版本的万年历

一,不死神兔(方法递归版)

不死神兔也叫做斐波那契数列或者叫做黄金分割数列或者叫做兔子数列:
不死神兔问题:有1对兔子,从出生后的第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第n个月有几对兔子

1.找规律当月兔子的对数等于上个月对数加上上个月对数
2.找出口:第一个月和第二个月兔子都是一对

public static void main(String[] args){
    
    int num =getRabbit(8);
    System.out.println(num);
}
public static int getRabbit(int month){
    if(month == 1 || month ==2){
        return 1;
    }else{
        return getRabbit(month-1) + getRabbit(month-2);
    }
}//21

二,打印万年历(方法版本)

需求:输入年和月,打印当月的日历
线索:1900年1月1日是星期一
分析: 1.输入年和月
            2.计算出1990年1月1日到输入年输入月的第一天的总天数
            3,计算当月的第一天是星期几
            4.计算当月的天数
            5.打印日历

import java.util.Scanner;
public class Test01{
        
        public static void main(String[] args){
	
		//1.输入年和月
		Scanner scan = new Scanner(System.in);
		System.out.println("请输入年:");
		int year = scan.nextInt();
		System.out.println("请输入月:");
		int month = scan.nextInt();
		
		//2.计算出1900年1月1日到输入年输入月的第一天的总天数
		int allDay = getAllDay(year,month);
		
		//3.计算星期几
		int week = getWeek(allDay);
		
		//4.计算当月的天数
		int day = getDay(year,month);
		
		//5.打印日期
		printCalendar(year,month,day,week);
	}
	
	//打印日历
	public static void printCalendar(int year,int month,int day,int week){
		System.out.println(year + "年" + month + "月");
		System.out.println("一\t二\t三\t四\t五\t六\t日");
		
		int count = 0;//换行的计数器(逢7换行)
		
		//打印空格
		for(int i = 1;i<week;i++){
			System.out.print("\t");
			count++;
		}
		
		//打印日期
		for(int i = 1;i<=day;i++){
			System.out.print(i + "\t");
			count++;
			if(count % 7 == 0){
				System.out.println();//换行
			}
		}
	}
	
	//计算星期
	public static int getWeek(int allDay){
		int week = allDay%7;
		if(week == 0){
			week = 7;
		}
		return week;
	}
	
	//计算出1900年1月1日到输入年输入月的第一天的总天数
	public static int getAllDay(int year,int month){
		int allDay = getAllDayOfYear(year) + getAllDayOfMonth(year,month) + 1;
		return allDay;
	}
	
	//计算1月到输入月的总天数
	public static int getAllDayOfMonth(int year,int month){
		int allDayOfMonth = 0;
		for(int i = 1;i<month;i++){
			allDayOfMonth += getDay(year,i);
		}
		return allDayOfMonth;
	}
	
	//计算1900年到输入年的总天数
	public static int getAllDayOfYear(int year){
		int allDayOfYear = 0;
		for(int i = 1900;i<year;i++){
			if(isLeapYear(i)){
				allDayOfYear += 366;
			}else{
				allDayOfYear += 365;
			}
		}
		return allDayOfYear;
	}
	
	//获取当月的天数
	public static int getDay(int year,int month){
		int day = 0;
		switch(month){
			case 1:case 3:case 5:case 7:case 8:case 10:case 12:
				day = 31;
			break;
			case 4:case 6:case 9:case 11:
				day = 30;
			break;
			case 2:
				if(isLeapYear(year)){
					day = 29;
				}else{
					day = 28;
				}
			break;			
		}
		return day;
	}
	
	//判断是否是闰年的方法
	public static boolean isLeapYear(int year){
		if(year%4==0 && year%100!=0 || year%400==0){
			return true;
		}
		return false;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值