题目分析



来源:acwing

分析:

  1. 每月有多少天用数组months[]来存储,下标是1 ~ 12,二月存的是平年28天。另外,星期1到星期日的下标是0~6,起点1850 年 1 月 1 日是星期二,它的下标是1.这样的话,可以用一个变量days来记录,某年某月的第一天到1850年1月1日的天数,然后 mod 7 就可以求出星期几!!!
  2. 判断闰年is_leap(),是的话返回1,否则返回0
  3. 求某年的某月有多少天get_days_a_month(int year, int month),返回天数。

以上三步是求解日期题目的模板!!!

下面是具体到本题的思路:

枚举哪一年,枚举一年中的月份,需要标记每天是星期几,这怎么做呢? 笔者采用的方法是记录该年该月的第一天到1850年1月1日总共过了多少天,用变量days表示,然后days对 7取模,就可以得到星期几。w = (1 + w) % 7; 这里加1是因为起点那天是周二,下标是1(前文讲到过)。

然后就是枚举,遍历每个月的所有天,找到合法的日期输出。

ac代码

#include<bits/stdc++.h>
using namespace std;
const int N = 210;// 每月有多少天
int months[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
}; int is_leap(int year){if( year % 400 == 0  || year % 4 == 0 && year % 100 )return 1;return 0;
}// 求哪年的每月有多少天
int get_days_a_month(int year, int month){if(month == 2) return months[month] + is_leap(year);return months[month];
}int main(){int a, b, c, y1, y2;cin >> a  >> b >> c >> y1 >> y2;int days = 0;for(int year = 1850; year  <= y2; year ++){for(int month = 1; month <= 12; month ++){if(year >= y1 && month == a){// w表示该月1号是星期几,cnt 表示当前是第几个星期int w = (1 + days) % 7, cnt = 0;// 枚举该年的所有天,d表示日期for(int d = 1; d <= get_days_a_month(year, month); d ++){// 等于所求的星期几,这里下标从0开始,而不是1,所以c-1if( w == c -1) {cnt ++; // 当前第几个星期if( cnt == b){ // 恰好是所要求的第b个星期,则输出printf("%04d/%02d/%02d\n", year, month, d);break;}}w = (w + 1) % 7;  // w不断增加,计算星期几}// 如果没有找到第b个星期,则输出noneif( cnt < b) puts("none");}// 记录某年的某月的1号距离1850年1月1日过了多少天 days += get_days_a_month(year, month);// cout << days << endl;}}}

题目来源

https://www.acwing.com/problem/content/3217/

CSP认证 201503-3 节日[C++题解]:模拟、枚举、日期题、日期模板题相关推荐

  1. CSP认证201604-1 折点计数[C++题解]:枚举、遍历

    题目分析 来源:acwing 分析: 直接枚举做即可. AC代码 #include<bits/stdc++.h> using namespace std; const int N = 10 ...

  2. CSP认证201503-4 网络延时[C++题解]:树的直径

    题目分析 来源:acwing 分析: 树的直径的概念: 树上最远的两个节点之间的距离就被称为树的直径,连接这两点的路径被称为树的最长链. 类似于圆的直径的概念:圆上直线距离最远的两个点构成直径. 这是 ...

  3. CSP认证201703-2 学生排队[C++题解]:模拟

    文章目录 题目解答 题目链接 题目解答 来源:acwing 分析:模拟,按照题目要求暴力来做,时间复杂度O(mn)O(mn)O(mn) AC代码 #include<bits/stdc++.h&g ...

  4. CSP认证201612-3 权限查询[C++题解]:模拟题、结构体、set、有点复杂

    题目分析 来源:acwing 分析:这样的模拟题,主要难在建模,需要思考用什么来存储. 这里用一个结构体来存权限.用哈希表来存<角色,权限结构体>的映射,当然权限结构体存在set中,需要去 ...

  5. CSP认证201803-3 URL映射[C++题解]:字符串处理、模拟

    文章目录 题目解答 题目链接 题目解答 来源:acwing 分析: 整体思路是什么呢? 第一,将所有的规则存下来,包括路径和对应的内容. 第二,对于读入的每一个待处理的url,遍历所有的规则,验证是否 ...

  6. CSP认证201803-1 跳一跳[C++题解]: 模拟

    文章目录 题目解答 题目链接 题目解答 来源:acwing 分析: 如果读入1,直接++:如果读入2,要根据前一次的值进行判断. 其实,这里是一个等差序列,公差是2.读入1时,等差数列清零:读入2时, ...

  7. CSP认证201609-2 火车购票[C++题解]:模拟、vector、排序

    题目分析 来源:acwing 分析: 提前打表,把每5张车票放在vector的一组中,由于是从小开始取票,我想用pop_back()弹出,所以只能倒序存票,然后sort排序即可. 这样tickets这 ...

  8. CSP认证201604-3 路径解析[C++题解]:字符串处理、模拟、vector切分字符串

    题目分析 来源:acwing 分析:对于当前目录,题目给定其是合法的,用vector来拆分它,去掉/,保留//之间的内容,这样整个当前目录就被保留下来. 然后对于每个读入,这里有两种情况,一种是绝对路 ...

  9. CSP认证201512-1 数位之和[C++题解]:模拟、水题

    题目分析 来源:acwing 分析:直接做即可. AC代码 #include<bits/stdc++.h> using namespace std;int main(){string s; ...

  10. CSP认证201503-1 图像旋转[C++题解]:模拟

    题目分析 来源:acwing 分析: 这题不需要复杂的处理,读入矩阵之后.只需要从后往前遍历每列,输出即可. ac代码 #include<bits/stdc++.h> using name ...

最新文章

  1. 4. 编程规范和编程安全指南--go语言
  2. 扩增子统计绘图6韦恩图:比较组间共有和特有OTU或分类单元
  3. 技术QA:如何把EXE转成MSI?
  4. Linq to SQL Dynamic 动态查询
  5. MySQL工作中的实际用_数据库在工作中的应用,以及什么是MySQL?
  6. 【Notes6】ajaxjson,校验用户名,自动提示,CORS,/swagger开发rest,Websocket,DNS
  7. 春运男子持刀强行劫走17张卧铺票 ....
  8. 怎样在php中使用PDF文档功能
  9. java string查找_查找输出程序(Java String类)
  10. Python——安装Scrapy时出现各种错误
  11. Thinking in AJAX(二) —— 基于AJAX的WEB设计
  12. Grails 基础环境搭建及HelloWorld
  13. Matlab图像显示
  14. 新泽西理工计算机科学硕士,新泽西理工学院计算机科学专业硕士申请需要满足哪些条件?...
  15. android卡在gradle,Android Studio打开新项目卡在Gradle的问题
  16. AI2022:如何在 Illustrator 中创建色板?
  17. 复数——概念和代数运算
  18. 广告归因:是什么和为什么
  19. 如何优雅的面对一坨翔~~感悟编程代码
  20. English Grammer-01

热门文章

  1. MyEclipse数据库连接配置(以Oracle为例)
  2. python selenium 自动登录_windows7 python3.63使用selenium+webdriver 实现自动登录使用过程...
  3. python对象复制_Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
  4. python创建文件夹_Python学习第71课-本地建立repository仓库
  5. python怎么显示结果_python中plot实现即时数据动态显示方法
  6. 安卓 buttontext怎么居中_三星发布会汇总,同样是Note 20,差距怎么就那么大呢?...
  7. js date 加一天_开发效率创新高,只因收下了这波 JS 操作
  8. ecs服务器网站文件放在哪里,云服务器ecs文件放哪里
  9. 【控制】《多无人机协同控制技术》周伟老师-第9章-单无人机目标跟踪飞行控制策略
  10. 11.3 人工合成数据-机器学习笔记-斯坦福吴恩达教授