专题(四) 枚举模拟排序 ——AcWing 1229. 日期问题

【题目描述】
在这里插入图片描述

AcWing 1229. 日期问题

【思路】
要保证日期是输出的升序,那么在枚举的时候可以年月日一起枚举,这样日期是严格递增的。
然后在判断日期是否合法,即在历史上是否真实存在。
最后输出使用System.out.printf("%d-%02d-%02d\n", y, m, d);可以保证前导0的存在。

import java.io.*;
public class Main{
    //时间范围:1960年1月1日至2059年12月31日
    static int days [] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

    public static boolean isLeap(int y){
        return (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0);
    }
    public static boolean check(int y, int m, int d){
        
        if( m <= 0 || m > 12 || d <= 0 || d > 31) return false;
        if( m != 2 && d > days[m] ) return false;
        //闰年二月
        if( m == 2 && isLeap(y) )
            return d <= 29;
        //平年二月
        return d <= days[m];
        
    }
    public static void main(String args[])throws Exception{
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        String s[] = bf.readLine().split("/");
        int f[] = new int[3];
        for(int i = 0; i < 3; i ++) f[i] = Integer.parseInt(s[i]);
        //  年/月/日的,有采用月/日/年的,还有采用日/月/年的
        // 多个日期按从早到晚排列 所以升序枚举 
        for(int i = 19600101; i <= 20591231; i ++){
           int y = i /10000, m = i % 10000 / 100, d = i % 100;
           if(check(y, m, d)){//判断日期是否有效
               if( y % 100 == f[0] && m == f[1] && d == f[2]    // 年/月/日
                    || y % 100 ==f[2] && m == f[0] && d == f[1]   // 月/日/年
                    ||y % 100 ==f[2] && m == f[1] && d == f[0]   // 日/月/年
               )
               System.out.printf("%d-%02d-%02d\n", y, m, d);
           }
            
        }
        
        

    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
枚举类可以在 `switch...case` 语句中使用。在 `switch` 后面的括号中,你需要提供一个枚举类型的变量或表达式。每个 `case` 分支需要指定一个枚举常量,并在后面跟上冒号。当 `switch` 语句执行时,它会将提供的枚举变量或表达式的值与每个 `case` 分支中指定的枚举常量的值进行比较,找到匹配的分支并执行其中的代码。 以下是一个简单的示例,演示了如何在 `switch...case` 语句中使用枚举类: ```java enum DayOfWeek { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } public class Example { public static void main(String[] args) { DayOfWeek day = DayOfWeek.MONDAY; switch (day) { case MONDAY: System.out.println("Today is Monday."); break; case TUESDAY: System.out.println("Today is Tuesday."); break; case WEDNESDAY: System.out.println("Today is Wednesday."); break; case THURSDAY: System.out.println("Today is Thursday."); break; case FRIDAY: System.out.println("Today is Friday."); break; case SATURDAY: System.out.println("Today is Saturday."); break; case SUNDAY: System.out.println("Today is Sunday."); break; default: System.out.println("Invalid day of week."); break; } } } ``` 在这个例子中,我们定义了一个枚举类 `DayOfWeek`,表示一周中的每一天。然后我们在 `main` 方法中创建了一个 `DayOfWeek` 类型的变量 `day`,并将其初始化为 `DayOfWeek.MONDAY`。接下来,我们使用 `switch...case` 语句来根据 `day` 的值输出一条消息,指示今天是哪一天。由于 `day` 的值为 `DayOfWeek.MONDAY`,因此 `switch` 语句将执行第一个 `case` 分支,并输出 "Today is Monday."。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值