1341. 十三号星期五 ( 枚举 模拟 )

AcWing:1341. 十三号星期五

在这里插入图片描述


枚举模拟即可

主要是处理好星期几的部分

rem 余数这里: 0 星期天、 1 星期一、 2 星期二、 3 星期三、 4 星期四、 5 星期五、 6 星期六



AC Code

import java.util.*;
import static java.lang.System.out;

public class Main{
    
    
    
    public static void main(String[] args) {
    
    
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        // 月份的天数
        int[] days = new int[]{
    
    31,28,31,30,31,30,31,31,30,31,30,31};
        int[] ans = new int[7];
        // rem 表示 1900  年 1 月 1 日是星期一
        int rem = 1, r = 13 % 7;
        
        // 年
        for(int y = 1900; y < 1900 + n; y++) {
    
    
            boolean t = isRun(y);
            // 月
            for(int m = 0; m < 12; m++) {
    
    
                int cnt = days[m];
                if(t && m == 1) cnt++;
                
                // 确定 13 号是星期几
                ans[(rem + r) % 7]++;
                
                // 确定下一个月的一号是星期几
                rem = (cnt % 7 + rem) % 7;
            }
        }
        
        for(int i = 0; i < 7; i++) {
    
    
            out.print(ans[i] + " ");
        }
        
    }
    
    
    // 判断是否为闰年
    public static boolean isRun(int year){
    
    
        if(year % 100 == 0 && year % 400 == 0) return true;
        if(year % 4 == 0 && year % 100 != 0) return true;
        return false;
    } 
    
}



猜你喜欢

转载自blog.csdn.net/qq_43765535/article/details/112912166