ブルーブリッジカップALGO-105アルゴリズム訓練するブラックフライデー

ブラックフライデーのアルゴリズム訓練  

制限時間:メモリ制限が1.0S:512.0メガバイト

 

問題の説明は、
  いくつかの西洋人は、数13金曜日ちょうど月であれば、彼らはとの見方の古代人と、あまりラッキーだと思うだろう、迷信を比較し、「すべては行きません。」あなたがプログラムを書く、与えられた年の統計では、両方の13号は金曜日、あなたは迷信の問題を解決するための友人の場合で何度もありました。
  説明:365日間(1)年うるう年366日、いわゆる閏年、4で割り切れる年は100で割り切れることができない、または両方を分割することができる100年で割り切れる400;(2)知られている1998年1月1日には、ユーザーが入力した年は確かに以上1998に等しい、木曜日です。
  入力フォーマットは:(以上1998に等しい)特定の年であるだけで1行を入力します。
  出力フォーマット:年の間に、ある出力のみ1行は、両方の13号は金曜日ケースで何度もありました。
サンプル入力と出力

サンプル入力

1998

サンプル出力

3

 

#include <stdio.h>

int days_of_month[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

int is_leap(int year)
{
    if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
        return 1;
    else
        return 0;
}

int day_of_week(int year, int month, int day)
{
    int days_to_19980101 = 0;

    for (int y = 1998; y < year; ++y)
    {
        if (is_leap(y))
            days_to_19980101 += 366;
        else
            days_to_19980101 += 365;
    }
    for (int m = 1; m < month; ++m)
    {
        days_to_19980101 += days_of_month[m];
        if (m == 2 && is_leap(year))
            days_to_19980101 += 1;
    }
    days_to_19980101 += day - 1;

    return (days_to_19980101 % 7 + 4) % 7;
}

int main()
{
    int year;
    int cnt = 0;

    scanf("%d", &year);
    for (int month = 1; month <= 12; ++month)
    {
        if (day_of_week(year, month, 13) == 5)
            cnt++;
    }
    printf("%d", cnt);

    return 0;
}

 

公開された221元の記事 ウォン称賛40 ビュー40000 +

おすすめ

転載: blog.csdn.net/liulizhi1996/article/details/104023924