codeforce_exercise_r17
目录
- 节日(csp201503-3) :
- 问题描述
- 题目简述
- 输入/输出格式
- 样例
- 问题分析
- 解题思路
- 参考代码
- 心得体会
节日(csp201503-3) :
问题描述
题目简述
有一类节日的日期并不是固定的,而是以“a月的第b个星期c”的形式定下来的,比如说母亲节就定为每年的五月的第二个星期日。
现在,给你a,b,c和y1, y2(1850 ≤ y1, y2 ≤ 2050),希望你输出从公元y1年到公元y2年间的每年的a月的第b个星期c的日期。
提示:关于闰年的规则:年份是400的整数倍时是闰年,否则年份是4的倍数并且不是100的倍数时是闰年,其他年份都不是闰年。例如1900年就不是闰年,而2000年是闰年。
为了方便你推算,已知1850年1月1日是星期二。
输入/输出格式
输入格式:
输入包含恰好一行,有五个整数a, b, c, y1, y2。其中c=1, 2, ……, 6, 7分别表示星期一、二、……、六、日。
输出格式:
对于y1和y2之间的每一个年份,包括y1和y2,按照年份从小到大的顺序输出一行。
如果该年的a月第b个星期c确实存在,则以"yyyy/mm/dd"的格式输出,即输出四位数的年份,两位数的月份,两位数的日期,中间用斜杠“/”分隔,位数不足时前补零。
如果该年的a月第b个星期c并不存在,则输出"none"(不包含双引号)。
样例
输入样例:
5 2 7 2014 2015
输出样例:
2014/05/11
2015/05/10
问题分析
解题思路
这个题其实比较的直接,实际上就是模仿一个翻日历的过程:先调整到对应年份,然后翻到对应月份,最后从这个月的第一天开始往后数,直到找到目标的日期即可。当然如果找到一个月的最后一天仍然没找到,那这天就不存在了。
参考代码
#include <iostream>using namespace std;int month_day[2][13]={-1,31,28,31,30,31,30,31,31,30,31,30,31,-1,31,29,31,30,31,30,31,31,30,31,30,31};class date
{public:int year;int month;int day;int num;int tag;
};date td;
date fd;
int a,b,c,sy,ey;void change_year(int t_year)
{if(t_year==td.year) return ;for(int i=td.year;i<t_year;i++){int add_day;if((i%400==0)||(i%4==0&&i%100!=0)) add_day=366;else add_day=365;td.tag=td.tag+(add_day%7);if(td.tag>7) td.tag=td.tag%7;td.year++;}
}void change_month(int t_month)
{int flag;if((fd.year%400==0)||(fd.year%4==0&&fd.year%100!=0)) flag=1;else flag=0;for(int i=1;i<t_month;i++){fd.tag=fd.tag+(month_day[flag][i])%7;if(fd.tag>7) fd.tag=fd.tag%7;fd.month++;}
}void change_day(int t_num,int t_day)
{int flag;if((fd.year%400==0)||(fd.year%4==0&&fd.year%100!=0)) flag=1;else flag=0;int count=0;while(1){if(fd.num==t_num&&fd.tag==t_day) break;else{count++;fd.day++;fd.tag++;if(fd.tag>7) fd.tag=fd.tag%7;if(count==7) {fd.num++;count=0;}}}if(fd.day>month_day[flag][fd.month]) printf("none\n");else{printf("%d/",fd.year);if(fd.month<10) printf("0%d/",fd.month);else printf("%d/",fd.month);if(fd.day<10) printf("0%d\n",fd.day);else printf("%d\n",fd.day);}
}int main()
{td.year=1850;td.month=1;td.day=1;td.num=1;td.tag=2;scanf("%d %d %d %d %d",&a,&b,&c,&sy,&ey);change_year(sy);for(int i=sy;i<=ey;i++){fd=td;change_month(a);change_day(b,c);change_year(i+1);}return 0;
}
心得体会
这个题总体来说还是比较简单的。尤其可以自己出样例来检验程序。然后思路上我感觉还是挺简单的。总之做的时候感觉还可以。模拟题题型还是非常多的,还是要加大题量,练习。
codeforce_exercise_r17相关推荐
最新文章
- 5m 云服务器2核4g_华为云服务器2核4G 5M 248一年
- [.net 面向对象编程基础] (13) 面向对象三大特性——多态
- UA OPTI501 电磁波 Lorentz Oscillator Model 1 Drude-Lorentz模型
- array_push_PHP array_push()函数与示例
- 创意or鸡肋?亚马逊想让智能音箱“手机”化
- Python实战从入门到精通第四讲——数据结构与算法2之实现一个优先级队列
- Nginx安全配置标准(for proxy)
- MyBatis generator 注解方式和xml方式
- Mac环境下安装配置Redis
- php前台点击按钮导出excel,php上导出excel表格数据-PHP如何将查询出来的数据导出成excel表格(最好做一个按钮)...
- Linux开发板烧录实验
- 如何做无线抄表既SCADA无线数据采集管理系统
- html制作日程安排,如何制作一个Web日程安排表?
- Git删除提交历史记录
- 网格边缘试探--服务网格的探索与实践
- centos 6.2 bind dlz mysql 驱动,bind9 dlz mysql 配置 – daemon
- 微信小程序卡包wx.addcard文档缺失-ext参数说明
- 记录一下我在lubuntu里面用到的工具
- 关于机器学习的面试题,你又了解多少呢?
- mybatis在实际项目中常见的排坑配置
热门文章
- linux授权执行权限6,linux的用户授权
- POJ1847【Dijkstra】
- 局域网共享打印机另类方法IIS共享打印机
- python_opencv(cv2)模块+灰度图二值化及降噪处理
- python 构造函数 __init__()方法的理解
- 爱奇艺VR获数亿元B轮融资,中国VR行业迎来特殊时期
- 云原生之 K8S 能够做什么
- Java三大异常概念和处理步骤(防患于未然)
- flv如何转换成mp4格式-flv无损转mp4步骤
- SELinux系列(五)——SELinux工作模式设置(getenforce、setenforce和sestatus命令)