黑色星期五

首先了解一个数学公式:

基姆拉尔森计算公式(已知2018-1-30求出星期二)

W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7      在公式中d表示日期中的日数,m表示月份数,y表示年数。

注意公式中有个与其他公式不同的地方:
把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。

C++实现这个公式:

 1 #include<iostream>
 2 using namespace std;
 3 
 4 int fun(int y,int m,int d){
 5     if(m==1||m==2){
 6         m+=12;
 7         y--;
 8     }
 9     return (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7+1;
10 } 
11 
12 int main(void){
13     int year,month,day;
14     cin>>year>>month>>day;
15     cout<<fun(year,month,day)<<endl;
16     return 0;
17 }

套用这个公式就可以轻易完成黑色星期五了

代码如下:

 1 #include<iostream>
 2 using namespace std;
 3 
 4 int fun(int y,int m,int d){
 5     if(m==1||m==2){
 6         m+=12;
 7         y--;
 8     }
 9     return (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7+1;
10 } 
11 
12 int main(void){
13     int year;
14     int ans=0; 
15     cin>>year;
16     for(int i=1;i<=12;i++){
17         if(fun(year,i,13)==5) ans++;
18     }
19     cout<<ans<<endl;
20     return 0;
21 } 

 

posted @ 2018-01-30 22:02  最咸的鱼  阅读(639)  评论(0编辑  收藏  举报