欧拉计划题19
- 前言
- 一 题目描述
- 二 题解分析
- 1.暴力求解(低配版解法)
- 2.蔡勒公式(公式法)
- 三 题解代码
前言
欧拉计划是学习数学、数论选手遨游的海洋,700+道题让你我越来越强。
打卡网址链接: link.
一 题目描述

题目链接:link.
二 题解分析
1.暴力求解(低配版解法)
可以这样思考,首先外层套一个1901年到2000年的循环,依次判断是否是闰年。
齐次开辟一个大小为12的数组存放非闰年的每个月天数,同时falg变量标记是否为闰年,作为二月份的加1操作。
s初始化为1,因为1901.1.1为星期一,s每次加当月天数,并且mod7,结果就是对应星期几,s=0为星期日。
2.蔡勒公式(公式法)
第一次听到蔡勒公式还是大一,呢个时候啥也不懂,参加了学校的一次编程比赛,遇到这种日期问题,我直接跳,(鄙人不才,不清楚每个月有多少天,hhh),赛后耿佬和我提到了蔡勒公式。
今天又偶然刷到这种题,还真是一种怀念。
百度百科链接:link.
我就简单写个公式,感兴趣的同学,上方链接寻求真理。

三 题解代码
注:罗马教皇决定在1582年10月4日后使用格利戈里历法;而英国则是在1752年9月3日后才接受使用格利戈里历法。
咱也不知道171还是172对。
// An highlighted block
#include <iostream>using namespace std;int flag=1;
int cl(int y, int m, int d){if(m == 1 || m == 2){y--;m += 12;}int w;if(y==1582&&m==9&&d==3) flag=0;if(flag)w = (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)% 7;else w = (d+2*m+3*(m+1)/5+y+y/4+5)% 7;return w;
}
int main(){int s = 0;for(int y = 1901; y <= 2000; y++){for(int m = 1; m <= 12; m++){if(cl(y, m, 1) == 6){ s++;}}}
cout<<s;return 0;
}
















![面试06,[长亮科技]()(offer)、[荔枝]()FM(在确定部门和薪资)、[涂鸦智能]()(第一轮电话面半小时,待后续)、华资软件(HR面)、[广州速游]()(已挂)。至于公司怎么样不加以言论。](https://img-blog.csdnimg.cn/img_convert/0a8f4edbf8a2587426f02790e8085e9c.png)