2017百度之星资格赛(A)1005 今夕何夕(日期计算)
2017-08-15 12:46
387 查看
题目链接:点击打开链接
题目中文,不再详述题意
思路:简单的日期计算,基础题。自己这个写法分类讨论多一些,细节多,偏于繁琐,容易出错,听人讨论说,有比较简洁的算法,感兴趣的小伙伴可以上网搜一搜。
题目中文,不再详述题意
思路:简单的日期计算,基础题。自己这个写法分类讨论多一些,细节多,偏于繁琐,容易出错,听人讨论说,有比较简洁的算法,感兴趣的小伙伴可以上网搜一搜。
// 今夕何夕.cpp 运行/限制:15ms/1000ms #include <cstdio> #include <cstring> #include <iostream> using namespace std; int month[2][13] = { {0,31,28,31,30,31,30,31,31,30,31,30,31},{ 0,31,29,31,30,31,30,31,31,30,31,30,31 } }; int judge(int y) {//判断瑞年 if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) { return 1; } return 0; } int calPre(int flag, int m, int d) {//flag用于说明瑞年平年,m-d为日期,计算本年该日期前的天数(包括本天) int re = 0; for (int i = 1; i < m; i++) { re += month[flag][i]; } re += d; return re; } int calBack(int flag, int pre) {//计算本年该日期后的天数(不包括本天) if (flag) { return 366 - pre; } else { return 365 - pre; } } int main(){ int t; int y, m, d; scanf("%d", &t); while (t--) { scanf("%d-%d-%d", &y, &m, &d); int flag = judge(y);//标记给出日期的瑞年平年 int pre = calPre(flag, m, d); int back = calBack(flag, pre); int re = back, i; if (m == 1) {//一月份 for (i = y + 1;; i++) { re += pre; if (re % 7 == 0) { break; } int f = judge(i); re += f ? 366 - pre : 365 - pre; } } else if(m > 2){//二月后 for (i = y + 1;; i++) { int f = judge(i); int p = flag > f ? pre - 1 : (f > flag?pre + 1 : pre); re += p; if (re % 7 == 0) { break; } re += f ? 366 - p : 365 - p; } } //二月;二月是个特殊月份,所以对月份分类讨论; //二月份又得分类讨论日子是不是29号,因为二月由于年数不同可能天数不同,存在开始时间为29号,当前年没有29号的情况 else if(d == 29){//日期为02-29 for (i = y + 1;; i++) { int f = judge(i); if (!f) {//该年没29号 re += 365; continue; } re += pre; if (re % 7 == 0) { break; } re += 366 - pre; } } else { for (i = y + 1;; i++) { re += pre; if (re % 7 == 0) { break; } int f = judge(i); re += f?366 - pre:365 - pre; } } printf("%04d\n", i); } return 0; }
相关文章推荐
- HDU 6112 今夕何夕【2017"百度之星"】【日期模拟计算】【基姆拉尔森计算公式】【蔡勒公式】
- 2017百度之星初赛:A-1005. 今夕何夕
- HDU 6112 今夕何夕 “2017百度之星 1005”
- HDU 6084 | 2017百度之星资格赛 1005 卡特兰数 + 分块打表
- 2017百度之星资格赛:1005. 寻找母串(卡特兰数+分块打表)
- 2017百度之星初赛(A) 1005 今夕何夕(阅读题)
- 百度之星 2017初赛第一场 1005 今夕何夕
- 百度之星2017初赛A-1005-今夕何夕
- 2017百度之星资格赛:1001. 度度熊保护村庄(计算几何+最小环)
- 2015百度之星资格赛1005
- 【2017百度之星资格赛】1004.度度熊的午饭时光思路及代码
- 2017百度之星资格赛:1004. 度度熊的午饭时光(01背包+记录路径)
- 2017百度之星资格赛 1002-图 1003-DP 1004-01背包(解选择方案)
- ACM学习历程—BestCoder 2015百度之星资格赛1004 放盘子(策略 && 计算几何)
- 【2017“百度之星”程序设计大赛-资格赛】度度熊与邪恶大魔王
- 2017"百度之星"程序设计大赛 - 初赛(A)-1001.小C的倍数问题(HDU6108) 1005.今夕何夕-蔡勒公式 (HDU6112)
- hdu 6112 今夕何夕(日期计算——蔡勒公式)
- 2017百度之星资格赛 1003 度度熊与邪恶大魔王
- 2017百度之星资格赛 度度熊的午饭时光(dfs)
- 【2017百度之星资格赛 1003】hdu 6082 完全背包