您的位置:首页 > 其它

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

2017-12-03 20:14 225 查看
这题我记得有算星期的公式,所以就查了一手,很方便没想别的方法了,公式和代码我都贴在下面

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: