目录

  • 节日(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相关推荐

最新文章

  1. 5m 云服务器2核4g_华为云服务器2核4G 5M 248一年
  2. [.net 面向对象编程基础] (13) 面向对象三大特性——多态
  3. UA OPTI501 电磁波 Lorentz Oscillator Model 1 Drude-Lorentz模型
  4. array_push_PHP array_push()函数与示例
  5. 创意or鸡肋?亚马逊想让智能音箱“手机”化
  6. Python实战从入门到精通第四讲——数据结构与算法2之实现一个优先级队列
  7. Nginx安全配置标准(for proxy)
  8. MyBatis generator 注解方式和xml方式
  9. Mac环境下安装配置Redis
  10. php前台点击按钮导出excel,php上导出excel表格数据-PHP如何将查询出来的数据导出成excel表格(最好做一个按钮)...
  11. Linux开发板烧录实验
  12. 如何做无线抄表既SCADA无线数据采集管理系统
  13. html制作日程安排,如何制作一个Web日程安排表?
  14. Git删除提交历史记录
  15. 网格边缘试探--服务网格的探索与实践
  16. centos 6.2 bind dlz mysql 驱动,bind9 dlz mysql 配置 – daemon
  17. 微信小程序卡包wx.addcard文档缺失-ext参数说明
  18. 记录一下我在lubuntu里面用到的工具
  19. 关于机器学习的面试题,你又了解多少呢?
  20. mybatis在实际项目中常见的排坑配置

热门文章

  1. linux授权执行权限6,linux的用户授权
  2. POJ1847【Dijkstra】
  3. 局域网共享打印机另类方法IIS共享打印机
  4. python_opencv(cv2)模块+灰度图二值化及降噪处理
  5. python 构造函数 __init__()方法的理解
  6. 爱奇艺VR获数亿元B轮融资,中国VR行业迎来特殊时期
  7. 云原生之 K8S 能够做什么
  8. Java三大异常概念和处理步骤(防患于未然)
  9. flv如何转换成mp4格式-flv无损转mp4步骤
  10. SELinux系列(五)——SELinux工作模式设置(getenforce、setenforce和sestatus命令)