CSP历年真题201509-2-日期计算(Java)

该代码片段展示了一个Java程序,用于确定给定年份的第d天是哪个月和哪一天。程序首先定义了闰年和非闰年每个月的天数,然后根据年份判断是否为闰年,最后通过一系列条件判断计算出具体日期。输入包括年份y和天数d,输出为月份和日期。

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

问题描述

给定一个年份y和一个整数d,问这一年的第d天是几月几日?

注意闰年的2月有29天。满足下面条件之一的是闰年:
  1) 年份是4的整数倍,而且不是100的整数倍;
  2) 年份是400的整数倍。

输入格式

输入的第一行包含一个整数y,表示年份,年份在1900到2015之间(包含1900和2015)。

输入的第二行包含一个整数d,d在1至365之间。

输出格式

输出两行,每行一个整数,分别表示答案的月份和日期。

样例输入

2015
80

样例输出

3
21

样例输入

2000
40

样例输出

2
9

思路

最简单的穷举法,首先定义两个一维整型数组,用于记录闰年和非闰年每个月的天数,然后判断年份,再分闰年和非闰年来计算结果。

代码

import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int y = in.nextInt();
        int d = in.nextInt();
        int[] a = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};// 闰年每个月的天数
        int[] b = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};// 非闰年每个月的天数
        if(isLeap(y)){// 是闰年
            if(d <= a[1]){
                System.out.println(1);
                System.out.println(d);
            }else if(a[1] < d && d <= a[1] + a[2]){
                System.out.println(2);
                System.out.println(d - a[1]);
            }else if(a[1] + a[2] < d && d <= a[1] + a[2] + a[3]){
                System.out.println(3);
                System.out.println(d - (a[1] + a[2]));
            }else if(a[1] + a[2] + a[3] < d && d <= a[1] + a[2] + a[3] + a[4]){
                System.out.println(4);
                System.out.println(d - (a[1] + a[2] + a[3]));
            }else if(a[1] + a[2] + a[3] + a[4] < d && d <= a[1] + a[2] + a[3] + a[4] + a[5]){
                System.out.println(5);
                System.out.println(d - (a[1] + a[2] + a[3] + a[4]));
            }else if(a[1] + a[2] + a[3] + a[4] + a[5] < d && d <= a[1] + a[2] + a[3] + a[4] + a[5] + a[6]){
                System.out.println(6);
                System.out.println(d - (a[1] + a[2] + a[3] + a[4] + a[5]));
            }else if(a[1] + a[2] + a[3] + a[4] + a[5] + a[6] < d && d <= a[1] + a[2] + a[3] + a[4] + a[5] + a[6] + a[7]){
                System.out.println(7);
                System.out.println(d - (a[1] + a[2] + a[3] + a[4] + a[5] + a[6]));
            }else if(a[1] + a[2] + a[3] + a[4] + a[5] + a[6] + a[7] < d && d <= a[1] + a[2] + a[3] + a[4] + a[5] + a[6] + a[7] + a[8]){
                System.out.println(8);
                System.out.println(d - (a[1] + a[2] + a[3] + a[4] + a[5] + a[6] + a[7]));
            }else if(a[1] + a[2] + a[3] + a[4] + a[5] + a[6] + a[7] + a[8] < d && d <= a[1] + a[2] + a[3] + a[4] + a[5] + a[6] + a[7] + a[8] + a[9]){
                System.out.println(9);
                System.out.println(d - (a[1] + a[2] + a[3] + a[4] + a[5] + a[6] + a[7] + a[8]));
            }else if(a[1] + a[2] + a[3] + a[4] + a[5] + a[6] + a[7] + a[8] + a[9] < d && d <= a[1] + a[2] + a[3] + a[4] + a[5] + a[6] + a[7] + a[8] + a[9] + a[10]){
                System.out.println(10);
                System.out.println(d - (a[1] + a[2] + a[3] + a[4] + a[5] + a[6] + a[7] + a[8] + a[9]));
            }else if(a[1] + a[2] + a[3] + a[4] + a[5] + a[6] + a[7] + a[8] + a[9] + a[10] < d && d <= a[1] + a[2] + a[3] + a[4] + a[5] + a[6] + a[7] + a[8] + a[9] + a[10] + a[11]){
                System.out.println(11);
                System.out.println(d - (a[1] + a[2] + a[3] + a[4] + a[5] + a[6] + a[7] + a[8] + a[9] + a[10]));
            }else{
                System.out.println(12);
                System.out.println(d - (a[1] + a[2] + a[3] + a[4] + a[5] + a[6] + a[7] + a[8] + a[9] + a[10] + a[11]));
            }
        }else{// 不是闰年
            if(d <= b[1]){
                System.out.println(1);
                System.out.println(d);
            }else if(b[1] < d && d <= b[1] + b[2]){
                System.out.println(2);
                System.out.println(d - b[1]);
            }else if(b[1] + b[2] < d && d <= b[1] + b[2] + b[3]){
                System.out.println(3);
                System.out.println(d - (b[1] + b[2]));
            }else if(b[1] + b[2] + b[3] < d && d <= b[1] + b[2] + b[3] + b[4]){
                System.out.println(4);
                System.out.println(d - (b[1] + b[2] + b[3]));
            }else if(b[1] + b[2] + b[3] + b[4] < d && d <= b[1] + b[2] + b[3] + b[4] + b[5]){
                System.out.println(5);
                System.out.println(d - (b[1] + b[2] + b[3] + b[4]));
            }else if(b[1] + b[2] + b[3] + b[4] + b[5] < d && d <= b[1] + b[2] + b[3] + b[4] + b[5] + b[6]){
                System.out.println(6);
                System.out.println(d - (b[1] + b[2] + b[3] + b[4] + b[5]));
            }else if(b[1] + b[2] + b[3] + b[4] + b[5] + b[6] < d && d <= b[1] + b[2] + b[3] + b[4] + b[5] + b[6] + b[7]){
                System.out.println(7);
                System.out.println(d - (b[1] + b[2] + b[3] + b[4] + b[5] + b[6]));
            }else if(b[1] + b[2] + b[3] + b[4] + b[5] + b[6] + b[7] < d && d <= b[1] + b[2] + b[3] + b[4] + b[5] + b[6] + b[7] + b[8]){
                System.out.println(8);
                System.out.println(d - (b[1] + b[2] + b[3] + b[4] + b[5] + b[6] + b[7]));
            }else if(b[1] + b[2] + b[3] + b[4] + b[5] + b[6] + b[7] + b[8] < d && d <= b[1] + b[2] + b[3] + b[4] + b[5] + b[6] + b[7] + b[8] + b[9]){
                System.out.println(9);
                System.out.println(d - (b[1] + b[2] + b[3] + b[4] + b[5] + b[6] + b[7] + b[8]));
            }else if(b[1] + b[2] + b[3] + b[4] + b[5] + b[6] + b[7] + b[8] + b[9] < d && d <= b[1] + b[2] + b[3] + b[4] + b[5] + b[6] + b[7] + b[8] + b[9] + b[10]){
                System.out.println(10);
                System.out.println(d - (b[1] + b[2] + b[3] + b[4] + b[5] + b[6] + b[7] + b[8] + b[9]));
            }else if(b[1] + b[2] + b[3] + b[4] + b[5] + b[6] + b[7] + b[8] + b[9] + b[10] < d && d <= b[1] + b[2] + b[3] + b[4] + b[5] + b[6] + b[7] + b[8] + b[9] + b[10] + b[11]){
                System.out.println(11);
                System.out.println(d - (b[1] + b[2] + b[3] + b[4] + b[5] + b[6] + b[7] + b[8] + b[9] + b[10]));
            }else{
                System.out.println(12);
                System.out.println(d - (b[1] + b[2] + b[3] + b[4] + b[5] + b[6] + b[7] + b[8] + b[9] + b[10] + b[11]));
            }
        }

    }

    // 判断是否是闰年的方法
    public static boolean isLeap(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、付费专栏及课程。

余额充值