天天看點

usaco1.1黑色星期五題解

兩種方法:1:用 基姆拉爾森 計算 公式(這個公式可以自行百度)  

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cmath>

using namespace std;

//定義一波變量 
int w,date[7];

int fuc (int y,int m,int d){
    
    if (m==1){
        y=y-1;
        m=13;
    }
    if (m==2){
        y=y-1;
        m=14;
    }
    w=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7;
    
    return w;
    
}

int main(){
    
    int n;
    cin>>n;
    
    for (int i=1900;i<=1900+n-1;i++){
        for (int j=1;j<=12;j++){
            date[fuc(i,j,13)]++;
        }
    }

    cout<<date[6]<<" "<<date[0]<<" "<<date[1]<<" "<<date[2]<<" "<<date[3]<<" "<<date[4]<<" "<<date[5]<<endl;
   
    return 0;
    
}
           

2:用暴力枚舉:  

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
//定義一波變量
int date[7],n,day,week=0;
bool check=false;//判斷是否為閏年
int main(){
    cin>>n;
    for (int i=1900;i<=1900+n-1;i++){
        for (int j=1;j<=12;j++){
           
            //首先判斷是不是閏年
            if (i%4==0){
                check=true;
            }
            if (i%4!=0){
                check=false;
            }
            //然後判斷是不是世紀年
            if (i%100==0){
                if (i%400==0){
                    check=true;
                }
                else{
                    check=false;
                }
            }
            //如果是閏年
            if (check){
                if (j==2){
                    day=29;
                }
            }
            if (check==false){
                if (j==2){
                    day=28;
                }
            }
            if (j==1||j==3||j==5||j==7||j==8||j==10||j==12){
                day=31;
            }
            if (j==4||j==6||j==9||j==11){
                day=30;
            }
            for (int k=1;k<=day;k++){
                week++;
                if (k==13) date[week%7]++;
            }
        }
    }
    cout<<date[6]<<" "<<date[0]<<" "<<date[1]<<" "<<date[2]<<" "<<date[3]<<" "<<date[4]<<" "<<date[5]<<endl;
    return 0;
}
           

繼續閱讀