蓝桥杯 算法训练 黑色星期五

来源:互联网 发布:网络歌手花球舞 编辑:程序博客网 时间:2024/04/24 02:32

这题我记得有算星期的公式,所以就查了一手,很方便没想别的方法了,公式和代码我都贴在下面


1.基姆拉尔森计算公式

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

  注意:在公式中有个与其他公式不同的地方:

  把一月和二月看成是上一年的十三月和十四月,

  例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。

  例:2006-10-17计算时:d=18,m=10,y=2006。


注:上面那个公式如果d不+1的话,那么4对应着星期五,所以我下面的代码就没给d+1了,直接用4去做判断


满分代码如下:


#include <iostream>
using namespace std;
int count=0;
int main()
{
int y,w;
cin>>y;
for(int i=1;i<13;i++){
if(i==1)w=(13+2*13+3*(13+1)/5+y-1+(y-1)/4-(y-1)/100+(y-1)/400)%7;
else if(i==2)w=(13+2*14+3*(14+1)/5+y-1+(y-1)/4-(y-1)/100+(y-1)/400)%7;
else w=(13+2*i+3*(i+1)/5+y+y/4-y/100+y/400)%7;
if(w==4)count++;
}
cout<<count;
return 0;
}

原创粉丝点击