USACO Training Section 1.1黑色星期五Friday the Thirteenth

时间:2022-07-28
本文章向大家介绍USACO Training Section 1.1黑色星期五Friday the Thirteenth,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

题目描述 13号又是一个星期五。13号在星期五比在其他日子少吗?为了回答这个问题,写一个程序,要求计算每个月的十三号落在周一到周日的次数。给出N年的一个周期,要求计算1900年1月1日至1900+N-1年12月31日中十三号落在周一到周日的次数,N为正整数且不大于400.

这里有一些你要知道的:

1、1900年1月1日是星期一.

2、4,6,11和9月有30天.其他月份除了2月都有31天.闰年2月有29天,平年2月有28天.

3、年份可以被4整除的为闰年(1992=4*498 所以 1992年是闰年,但是1990年不是闰年).

4、以上规则不适合于世纪年。可以被400整除的世纪年为闰年,否则为平年。所以,1700,1800,1900和2100年是平年,而2000年是闰年.

请不要调用现成的函数

请不要预先算好数据(就是叫不准打表)!

输入输出格式 输入格式: 一个正整数n.

输出格式: **输出请从周六开始

输入输出样例 输入样例#1: 20 输出样例#1: 36 33 34 33 35 35 34 说明 题目翻译来自NOCOW。 附上某神人的强模拟,很强,600行

#include<cstdio>

using namespace std;

bool isLeapYear(int year){
    if(year == 1900 || year == 2000 || year == 2100 || year == 2200 || year == 2300 || year == 2400 || year == 2500){
        if(year % 400 == 0){
            return true;
        }
    }else if(year % 4 == 0){
        return true;
    }

    return false;
}

int main(){
    int n;
    scanf("%d",&n);

    int ans[7] = {};

    int day = 1;
    for(int i = 1900;i < 1900 + n;i++){
        if(isLeapYear(i) == false){
            for(int j = 0;j < 31;j++){//平年1月 
                if(j == 13){
                    if(day == 1){
                        ans[day - 1]++;
                    }else if(day == 2){
                        ans[day - 1]++;
                    }else if(day == 3){
                        ans[day - 1]++;
                    }else if(day == 4){
                        ans[day - 1]++;
                    }else if(day == 5){
                        ans[day - 1]++;
                    }else if(day == 6){
                        ans[day - 1]++;
                    }else if(day == 7){
                        ans[day - 1]++;
                    }
                }

                day++;

                if(day > 7){
                    day = 1;
                }
            }

            for(int j = 0;j < 28;j++){//平年2月 
                if(j == 13){
                    if(day == 1){
                        ans[day - 1]++;
                    }else if(day == 2){
                        ans[day - 1]++;
                    }else if(day == 3){
                        ans[day - 1]++;
                    }else if(day == 4){
                        ans[day - 1]++;
                    }else if(day == 5){
                        ans[day - 1]++;
                    }else if(day == 6){
                        ans[day - 1]++;
                    }else if(day == 7){
                        ans[day - 1]++;
                    }
                }

                day++;

                if(day > 7){
                    day = 1;
                }
            }

            for(int j = 0;j < 31;j++){//平年3月 
                if(j == 13){
                    if(day == 1){
                        ans[day - 1]++;
                    }else if(day == 2){
                        ans[day - 1]++;
                    }else if(day == 3){
                        ans[day - 1]++;
                    }else if(day == 4){
                        ans[day - 1]++;
                    }else if(day == 5){
                        ans[day - 1]++;
                    }else if(day == 6){
                        ans[day - 1]++;
                    }else if(day == 7){
                        ans[day - 1]++;
                    }
                }

                day++;

                if(day > 7){
                    day = 1;
                }
            }

            for(int j = 0;j < 30;j++){//平年4月 
                if(j == 13){
                    if(day == 1){
                        ans[day - 1]++;
                    }else if(day == 2){
                        ans[day - 1]++;
                    }else if(day == 3){
                        ans[day - 1]++;
                    }else if(day == 4){
                        ans[day - 1]++;
                    }else if(day == 5){
                        ans[day - 1]++;
                    }else if(day == 6){
                        ans[day - 1]++;
                    }else if(day == 7){
                        ans[day - 1]++;
                    }
                }

                day++;

                if(day > 7){
                    day = 1;
                }
            }

            for(int j = 0;j < 31;j++){//平年5月 
                if(j == 13){
                    if(day == 1){
                        ans[day - 1]++;
                    }else if(day == 2){
                        ans[day - 1]++;
                    }else if(day == 3){
                        ans[day - 1]++;
                    }else if(day == 4){
                        ans[day - 1]++;
                    }else if(day == 5){
                        ans[day - 1]++;
                    }else if(day == 6){
                        ans[day - 1]++;
                    }else if(day == 7){
                        ans[day - 1]++;
                    }
                }

                day++;

                if(day > 7){
                    day = 1;
                }
            }

            for(int j = 0;j < 30;j++){//平年6月 
                if(j == 13){
                    if(day == 1){
                        ans[day - 1]++;
                    }else if(day == 2){
                        ans[day - 1]++;
                    }else if(day == 3){
                        ans[day - 1]++;
                    }else if(day == 4){
                        ans[day - 1]++;
                    }else if(day == 5){
                        ans[day - 1]++;
                    }else if(day == 6){
                        ans[day - 1]++;
                    }else if(day == 7){
                        ans[day - 1]++;
                    }
                }

                day++;

                if(day > 7){
                    day = 1;
                }
            }

            for(int j = 0;j < 31;j++){//平年7月 
                if(j == 13){
                    if(day == 1){
                        ans[day - 1]++;
                    }else if(day == 2){
                        ans[day - 1]++;
                    }else if(day == 3){
                        ans[day - 1]++;
                    }else if(day == 4){
                        ans[day - 1]++;
                    }else if(day == 5){
                        ans[day - 1]++;
                    }else if(day == 6){
                        ans[day - 1]++;
                    }else if(day == 7){
                        ans[day - 1]++;
                    }
                }

                day++;

                if(day > 7){
                    day = 1;
                }
            }

            for(int j = 0;j < 31;j++){//平年8月 
                if(j == 13){
                    if(day == 1){
                        ans[day - 1]++;
                    }else if(day == 2){
                        ans[day - 1]++;
                    }else if(day == 3){
                        ans[day - 1]++;
                    }else if(day == 4){
                        ans[day - 1]++;
                    }else if(day == 5){
                        ans[day - 1]++;
                    }else if(day == 6){
                        ans[day - 1]++;
                    }else if(day == 7){
                        ans[day - 1]++;
                    }
                }

                day++;

                if(day > 7){
                    day = 1;
                }
            }

            for(int j = 0;j < 30;j++){//平年9月 
                if(j == 13){
                    if(day == 1){
                        ans[day - 1]++;
                    }else if(day == 2){
                        ans[day - 1]++;
                    }else if(day == 3){
                        ans[day - 1]++;
                    }else if(day == 4){
                        ans[day - 1]++;
                    }else if(day == 5){
                        ans[day - 1]++;
                    }else if(day == 6){
                        ans[day - 1]++;
                    }else if(day == 7){
                        ans[day - 1]++;
                    }
                }

                day++;

                if(day > 7){
                    day = 1;
                }
            }

            for(int j = 0;j < 31;j++){//平年10月 
                if(j == 13){
                    if(day == 1){
                        ans[day - 1]++;
                    }else if(day == 2){
                        ans[day - 1]++;
                    }else if(day == 3){
                        ans[day - 1]++;
                    }else if(day == 4){
                        ans[day - 1]++;
                    }else if(day == 5){
                        ans[day - 1]++;
                    }else if(day == 6){
                        ans[day - 1]++;
                    }else if(day == 7){
                        ans[day - 1]++;
                    }
                }

                day++;

                if(day > 7){
                    day = 1;
                }
            }

            for(int j = 0;j < 30;j++){//平年11月 
                if(j == 13){
                    if(day == 1){
                        ans[day - 1]++;
                    }else if(day == 2){
                        ans[day - 1]++;
                    }else if(day == 3){
                        ans[day - 1]++;
                    }else if(day == 4){
                        ans[day - 1]++;
                    }else if(day == 5){
                        ans[day - 1]++;
                    }else if(day == 6){
                        ans[day - 1]++;
                    }else if(day == 7){
                        ans[day - 1]++;
                    }
                }

                day++;

                if(day > 7){
                    day = 1;
                }
            }

            for(int j = 0;j < 31;j++){//平年12月 
                if(j == 13){
                    if(day == 1){
                        ans[day - 1]++;
                    }else if(day == 2){
                        ans[day - 1]++;
                    }else if(day == 3){
                        ans[day - 1]++;
                    }else if(day == 4){
                        ans[day - 1]++;
                    }else if(day == 5){
                        ans[day - 1]++;
                    }else if(day == 6){
                        ans[day - 1]++;
                    }else if(day == 7){
                        ans[day - 1]++;
                    }
                }

                day++;

                if(day > 7){
                    day = 1;
                }
            }
        }else{
            for(int j = 0;j < 31;j++){//闰年1月 
                if(j == 13){
                    if(day == 1){
                        ans[day - 1]++;
                    }else if(day == 2){
                        ans[day - 1]++;
                    }else if(day == 3){
                        ans[day - 1]++;
                    }else if(day == 4){
                        ans[day - 1]++;
                    }else if(day == 5){
                        ans[day - 1]++;
                    }else if(day == 6){
                        ans[day - 1]++;
                    }else if(day == 7){
                        ans[day - 1]++;
                    }
                }

                day++;

                if(day > 7){
                    day = 1;
                }
            }

            for(int j = 0;j < 29;j++){//闰年2月 
                if(j == 13){
                    if(day == 1){
                        ans[day - 1]++;
                    }else if(day == 2){
                        ans[day - 1]++;
                    }else if(day == 3){
                        ans[day - 1]++;
                    }else if(day == 4){
                        ans[day - 1]++;
                    }else if(day == 5){
                        ans[day - 1]++;
                    }else if(day == 6){
                        ans[day - 1]++;
                    }else if(day == 7){
                        ans[day - 1]++;
                    }
                }

                day++;

                if(day > 7){
                    day = 1;
                }
            }

            for(int j = 0;j < 31;j++){//闰年3月 
                if(j == 13){
                    if(day == 1){
                        ans[day - 1]++;
                    }else if(day == 2){
                        ans[day - 1]++;
                    }else if(day == 3){
                        ans[day - 1]++;
                    }else if(day == 4){
                        ans[day - 1]++;
                    }else if(day == 5){
                        ans[day - 1]++;
                    }else if(day == 6){
                        ans[day - 1]++;
                    }else if(day == 7){
                        ans[day - 1]++;
                    }
                }

                day++;

                if(day > 7){
                    day = 1;
                }
            }

            for(int j = 0;j < 30;j++){//闰年4月 
                if(j == 13){
                    if(day == 1){
                        ans[day - 1]++;
                    }else if(day == 2){
                        ans[day - 1]++;
                    }else if(day == 3){
                        ans[day - 1]++;
                    }else if(day == 4){
                        ans[day - 1]++;
                    }else if(day == 5){
                        ans[day - 1]++;
                    }else if(day == 6){
                        ans[day - 1]++;
                    }else if(day == 7){
                        ans[day - 1]++;
                    }
                }

                day++;

                if(day > 7){
                    day = 1;
                }
            }

            for(int j = 0;j < 31;j++){//闰年5月 
                if(j == 13){
                    if(day == 1){
                        ans[day - 1]++;
                    }else if(day == 2){
                        ans[day - 1]++;
                    }else if(day == 3){
                        ans[day - 1]++;
                    }else if(day == 4){
                        ans[day - 1]++;
                    }else if(day == 5){
                        ans[day - 1]++;
                    }else if(day == 6){
                        ans[day - 1]++;
                    }else if(day == 7){
                        ans[day - 1]++;
                    }
                }

                day++;

                if(day > 7){
                    day = 1;
                }
            }

            for(int j = 0;j < 30;j++){//闰年6月 
                if(j == 13){
                    if(day == 1){
                        ans[day - 1]++;
                    }else if(day == 2){
                        ans[day - 1]++;
                    }else if(day == 3){
                        ans[day - 1]++;
                    }else if(day == 4){
                        ans[day - 1]++;
                    }else if(day == 5){
                        ans[day - 1]++;
                    }else if(day == 6){
                        ans[day - 1]++;
                    }else if(day == 7){
                        ans[day - 1]++;
                    }
                }

                day++;

                if(day > 7){
                    day = 1;
                }
            }

            for(int j = 0;j < 31;j++){//闰年7月 
                if(j == 13){
                    if(day == 1){
                        ans[day - 1]++;
                    }else if(day == 2){
                        ans[day - 1]++;
                    }else if(day == 3){
                        ans[day - 1]++;
                    }else if(day == 4){
                        ans[day - 1]++;
                    }else if(day == 5){
                        ans[day - 1]++;
                    }else if(day == 6){
                        ans[day - 1]++;
                    }else if(day == 7){
                        ans[day - 1]++;
                    }
                }

                day++;

                if(day > 7){
                    day = 1;
                }
            }

            for(int j = 0;j < 31;j++){//闰年8月 
                if(j == 13){
                    if(day == 1){
                        ans[day - 1]++;
                    }else if(day == 2){
                        ans[day - 1]++;
                    }else if(day == 3){
                        ans[day - 1]++;
                    }else if(day == 4){
                        ans[day - 1]++;
                    }else if(day == 5){
                        ans[day - 1]++;
                    }else if(day == 6){
                        ans[day - 1]++;
                    }else if(day == 7){
                        ans[day - 1]++;
                    }
                }

                day++;

                if(day > 7){
                    day = 1;
                }
            }

            for(int j = 0;j < 30;j++){//闰年9月 
                if(j == 13){
                    if(day == 1){
                        ans[day - 1]++;
                    }else if(day == 2){
                        ans[day - 1]++;
                    }else if(day == 3){
                        ans[day - 1]++;
                    }else if(day == 4){
                        ans[day - 1]++;
                    }else if(day == 5){
                        ans[day - 1]++;
                    }else if(day == 6){
                        ans[day - 1]++;
                    }else if(day == 7){
                        ans[day - 1]++;
                    }
                }

                day++;

                if(day > 7){
                    day = 1;
                }
            }

            for(int j = 0;j < 31;j++){//闰年10月 
                if(j == 13){
                    if(day == 1){
                        ans[day - 1]++;
                    }else if(day == 2){
                        ans[day - 1]++;
                    }else if(day == 3){
                        ans[day - 1]++;
                    }else if(day == 4){
                        ans[day - 1]++;
                    }else if(day == 5){
                        ans[day - 1]++;
                    }else if(day == 6){
                        ans[day - 1]++;
                    }else if(day == 7){
                        ans[day - 1]++;
                    }
                }

                day++;

                if(day > 7){
                    day = 1;
                }
            }

            for(int j = 0;j < 30;j++){//闰年11月 
                if(j == 13){
                    if(day == 1){
                        ans[day - 1]++;
                    }else if(day == 2){
                        ans[day - 1]++;
                    }else if(day == 3){
                        ans[day - 1]++;
                    }else if(day == 4){
                        ans[day - 1]++;
                    }else if(day == 5){
                        ans[day - 1]++;
                    }else if(day == 6){
                        ans[day - 1]++;
                    }else if(day == 7){
                        ans[day - 1]++;
                    }
                }

                day++;

                if(day > 7){
                    day = 1;
                }
            }

            for(int j = 0;j < 31;j++){//闰年12月 
                if(j == 13){
                    if(day == 1){
                        ans[day - 1]++;
                    }else if(day == 2){
                        ans[day - 1]++;
                    }else if(day == 3){
                        ans[day - 1]++;
                    }else if(day == 4){
                        ans[day - 1]++;
                    }else if(day == 5){
                        ans[day - 1]++;
                    }else if(day == 6){
                        ans[day - 1]++;
                    }else if(day == 7){
                        ans[day - 1]++;
                    }
                }

                day++;

                if(day > 7){
                    day = 1;
                }
            }
        }
    }

    printf("%d ",ans[6]);
    printf("%d ",ans[0]);
    printf("%d ",ans[1]);
    printf("%d ",ans[2]);
    printf("%d ",ans[3]);
    printf("%d ",ans[4]);
    printf("%d ",ans[5]);

    return 0;
}