蓝桥杯 算法训练 黑色星期五
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;
}
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;
}
相关文章推荐
- 蓝桥杯 算法训练 黑色星期五
- 蓝桥杯 算法训练 黑色星期五
- 蓝桥杯 算法训练 黑色星期五
- 蓝桥杯算法训练 黑色星期五 题解
- 蓝桥杯 算法训练 摆动序列
- 蓝桥杯 - 算法训练 安慰奶牛 (Kruscal最小生成树+技巧)
- 蓝桥杯 算法训练 Anagrams问题
- 算法训练 Car的旅行路线 蓝桥杯
- 蓝桥杯 算法训练 删除数组零元素
- 蓝桥杯 ALGO-115 算法训练 和为T Java版
- 算法训练 一元三次方程求解 蓝桥杯
- 蓝桥杯——算法训练 P1103
- 蓝桥杯 算法训练 关联矩阵
- 算法训练 王、后传说 蓝桥杯
- 小虫梦想家之 蓝桥杯之 算法训练 2的次幂表示
- 蓝桥杯 ALGO-3 算法训练 K好数 (动态规划 DP)
- 算法-蓝桥杯-入门训练 A+B问题(JAVA)
- 蓝桥杯 算法训练 水仙花
- 蓝桥杯 算法训练 4-2找公倍数
- 蓝桥杯 算法训练 未名湖边的烦恼