洛谷 P1202 [USACO1.1]黑色星期五Friday the Thirteenth

題目描述

13號又是一個星期五。13號在星期五比在其餘日子少嗎?爲了回答這個問題,寫一個程序,要求計算每一個月的十三號落在週一到週日的次數。給出N年的一個週期,要求計算1900年1月1日至1900+N-1年12月31日中十三號落在週一到週日的次數,N爲正整數且不大於400.ios

這裏有一些你要知道的:ide

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

二、4,6,11和9月有30天.其餘月份除了2月都有31天.閏年2月有29天,平年2月有28天.spa

三、年份能夠被4整除的爲閏年(1992=4*498 因此 1992年是閏年,可是1990年不是閏年).翻譯

四、以上規則不適合於世紀年。能夠被400整除的世紀年爲閏年,不然爲平年。因此,1700,1800,1900和2100年是平年,而2000年是閏年.code

請不要調用現成的函數blog

請不要預先算好數據(就是叫不許打表)!get

輸入輸出格式

輸入格式:

 

一個正整數n.string

 

輸出格式:

 

**輸出請從週六開始it

 

輸入輸出樣例

輸入樣例#1: 複製
20
輸出樣例#1: 複製
36 33 34 33 35 35 34

說明

題目翻譯來自NOCOW。

USACO Training Section 1.1

/*
簡單的模擬就行了。
*/
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,now;
int ans[7];
int num[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
bool judge(int now){
    if(now%100==0){
        if(now%400==0)    return true;
        else return false;
    }
    else{
        if(now%4==0)    return true;
        else return false;
    }
}
int main(){
    scanf("%d",&n);
    now=1;
    for(int i=1900;i<1900+n;i++){
        for(int j=1;j<=12;j++){
            int x=now;x+=12;x%=7;
            if(x==0)    x=7;
            ans[x]++;
            if(j==2){
                if(judge(i)){
                    now+=29;now%=7;
                    if(now==0)    now=7;
                }
                else{
                    now+=28;now%=7;
                    if(now==0)    now=7;
                }
            }
            else{
                now+=num[j];now%=7;
                if(now==0)    now=7;
            }
        }
    }
    cout<<ans[6]<<" "<<ans[7]<<" "; 
    for(int i=1;i<=5;i++)
        cout<<ans[i]<<" ";
}
100
相關文章
相關標籤/搜索