1. 程式人生 > 其它 >AcWing 1341十三號星期五

AcWing 1341十三號星期五

技術標籤:寒假每日一題程式設計演算法c++

題目描述:

十三號星期五真的很不常見嗎?

每個月的十三號是星期五的頻率是否比一週中的其他幾天低?

請編寫一個程式,計算NN年內每個月的1313號是星期日,星期一,星期二,星期三,星期四,星期五和星期六的頻率。

測試的時間段將會開始於19001900年11月11日,結束於1900+N−11900+N−1年1212月3131日。

一些有助於你解題的額外資訊:

  1. 19001900年11月11日是星期一。
  2. 在一年中,44月、66月、99月、1111月每個月3030天,22月平年2828天,閏年2929天,其他月份每個月31天。
  3. 公曆年份是44的倍數且不是100100的倍數的年份為閏年,例如19921992年是閏年,19901990年不是閏年。
  4. 公曆年份是整百數並且是400400的倍數的也是閏年,例如1700年,1800年,1900年,2100年不是閏年,2000年是閏年。

輸入格式

共一行,包含一個整數NN。

輸出格式

共一行,包含七個整數,整數之間用一個空格隔開,依次表示星期六,星期日,星期一,星期二,星期三,星期四,星期五在十三號出現的次數。

資料範圍

1≤N≤4001≤N≤400

輸入樣例:

20

輸出樣例:

36 33 34 33 35 35 34
#include <iostream>
#include <cstdio>

using namespace std;
int year[2][13] = {{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
                {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};

int judge(int x)
{
    return (x % 4 == 0 && x % 100 != 0) || (x % 400 == 0);
}
int n;
int mon, tue, wed, thu, fri, sta, sun;
int a[9];

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

    int cou = 0;

    for(int y = 1900; y < 1900 + n; y++)
    {
        int yy = 0;
        if(judge(y))
            yy = 1;
        else
            yy = 0;

        for(int m = 1; m <= 12; m ++)
        {
            for(int d = 1; d <= year[yy][m]; d++)
            {
                cou++;
                cou = cou % 7;
                if(d == 13)
                    a[cou] ++;
            }
        }
    }

    printf("%d ", a[6]);
    for(int i = 0; i <= 5; i++)
        printf("%d ", a[i]);
    printf("\n");


    return 0;
}