蓝桥杯2023A-01-特殊日期(Java)

1.特殊日期

  • 题目描述

image-20240409102053526

  • 思路分析
计算从1900年到9999年之间,所有日期(年月日)的数字之和等于该年份的数字之和的次数。换句话说,找出满足以下条件的日期数量:

[sum(年份) = sum(月份) + sum(日期)]

其中,[sum(n)] 表示将数字 (n) 的各个位数相加的结果。

这段代码首先使用两个嵌套的循环遍历年份和月份,然后确定每个月份的天数,并在内部循环中遍历每一天。对于每一天,它计算年份、月份和日期的数字之和,如果它们满足上述条件,则将计数器递增。最后,输出满足条件的日期数量。

代码中使用的 isYear 函数用于确定某一年是否为闰年,而 sum 函数用于计算一个数字的各位数之和。
  • Java代码实现
public static void main(String[] args) {
    int count = 0; // 用于计算满足条件的日期数量
    for (int year = 1900; year <= 9999; year++) { // 遍历年份从1900到9999
        for (int month = 1; month <= 12; month++) { // 遍历月份从1到12
            int dayLength = 31; // 初始化每个月的天数,默认为31天
            if (month == 2) { // 对于二月份
                dayLength = isLeapYear(year) ? 29 : 28; // 如果是闰年,则天数为29,否则为28
            } else if (month == 4 || month == 6 || month == 9 || month == 11) {
                // 对于4月、6月、9月和11月,设置天数为30天
                dayLength = 30;
            }
            for (int day = 1; day <= dayLength; day++) { // 遍历每个月的日期
                if (sum(year) == sum(month) + sum(day)) { // 如果年份的数字之和等于月份和日期的数字之和
                    count++; // 满足条件的日期数量加1
                }
            }
        }
    }
    System.out.println(count); // 输出满足条件的日期数量
}

// 判断是否为闰年
private static boolean isLeapYear(int year) {
    if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { // 闰年的判断条件
        return true; // 是闰年则返回true
    }
    return false; // 否则返回false
}

// 求解数字各位数之和
private static int sum(int num) {
    int sum = 0; // 初始化各位数之和
    while (num != 0) { // 循环直到num为0
        sum += num % 10; // 将num的个位数加到sum中
        num /= 10; // 去掉num的个位数
    }
    return sum; // 返回各位数之和
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值