HDU 6112 今夕何夕 蔡勒公式
2024-10-20 11:55:42
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6112题意:中文题目
分析:关键点在与如何计算一个日期是星期几,这个可以通过蔡勒公式来计算。基姆拉尔森计算公式可以通过给定的year month day 计算出给定日期是星期几,注意:在公式中有个与其他公式不同的地方:
把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算,最后这道题要考虑闰年的情况,2月29号只可能在闰年中出现。基姆拉尔森计算公式: W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7 在公式中d表示日期中的日数,m表示月份数,y表示年数。
#include <bits/stdc++.h>
using namespace std;
int cal(int y, int m, int d)
{
if(m==1||m==2){
m+=12;
y--;
}
return (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
}
bool leap(int y){
if(y%400==0||(y%4==0&&y%100!=0)) return true;
else return false;
}
int main()
{
int T; scanf("%d", &T);
while(T--){
int y,m,d;
scanf("%d-%d-%d",&y,&m,&d);
int w=cal(y,m,d);
int flag=0;
if(m==2&&d==29){
flag=1;
}
if(flag){
for(int i=y+1;; i++){
if(cal(i,m,d)==w&&leap(i)){
printf("%d\n", i);
break;
}
}
}
else{
for(int i=y+1;;i++){
if(cal(i,m,d)==w){
printf("%d\n",i);
break;
}
}
}
}
return 0;
}
最新文章
- [SE0]简单的搜索引擎原理
- 点击其它地方DIV隐藏
- PHP安装所最到的问题-解决方案
- Jeasyframe 开源框架 稳定版 V1.5 发布
- bzoj 1854: [Scoi2010]游戏
- Spring security与shiro
- Linux下的Job Control(转:http://blog.chinaunix.net/uid-26495963-id-3062757.html)
- copy(source,destination)拷贝文件
- MultiROM for the XIAOMI MI2S/2C/2! (Kexec HardBoot Enabled with Kexec HardBoot Patch!)
- Redis实现高并发分布式序列号
- .net基础第一天
- kubernetes调度pod运行于master节点上
- [openjudge-动态规划]Maximum sum
- Nuget 配置文件的位置
- hive归档分区
- 【记录】解决VS2015调试Xamarin程序一闪而过(使用微软ANDROID模拟器)
- ORACLE中CONNECT BY...START WITH...的使用
- HDU.1850 being a good boy in spring festival (博弈论 尼姆博弈)
- Java常用的异常类型
- 如何让EasyUI弹出层跳出框架