节日(CCF试题)
试题名称: 节日
时间限制: 1.0s
内存限制: 256.0MB
问题描述
有一类节日的日期并不是固定的,而是以“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
评测用例规模与约定
这个可是标准日历,从日历显示中我们可以知道,2016年1月的第一个星期的星期五是1月1号,那么第一个星期还会存在星期1,2,3,4吗?不可能吧,因为2016年的1月1号是从第一个星期的周五开始的。所以说如果输入:1 1 4 2016 2016,那么会输出"none"。对不对,对不对,对不对,同志们,正常理解应该是这样的吧。#include "stdafx.h"
#include <iostream>
#include <stdio.h>
using namespace std;
const int YEAR = ;
int flag = ;
//平年和闰年的月份所含的天数
//daysOfMonth[0][]表示平年月份的天数
//daysOfMonth[1][]表示闰年月份的天数
int daysOfMonth[][] =
{
{ , , , , , , , , , , , , },
{ , , , , , , , , , , , , }
}; //判断是否为闰年
void judgeIsLeapYear(int year)
{
if ((year % == ) || (year % == && year % != ))
flag = ;
else
flag = ;
} int cmpDays(int y, int m)
{
int days = ;
for (int i = YEAR; i < y; i++)
{
judgeIsLeapYear(i);
if (flag == )
days += ;
else
days += ;
}
judgeIsLeapYear(y);
for (int i = ; i <= m; i++)
days += daysOfMonth[flag][i-];
return days;
} int main()
{
int a, b, c, y1, y2;
int d1, d2;
int dth;//每月一号是星期几
while (scanf("%d%d%d%d%d", &a, &b, &c, &y1, &y2) != EOF)
{
for (int i = y1; i <= y2; i++)
{
d1 = cmpDays(i, a);//与1850年1月1日相差的天数
dth = d1 % + ;//当前a月1号是星期几
if (dth == )
dth = ;
//计算a月第b个星期星期c的具体日期
d2 = (b - ) * - dth + c + ; if (b == && c<dth || d2 > daysOfMonth[flag][b])
{
printf("none\n");
continue;
} if (d2 <= daysOfMonth[flag][a])
printf("%d/%02d/%02d\n", i, a, d2); }
}
return ;
}
绞尽脑汁了,我擦,修改一下,这个还是看的网上的一篇文章进行修改的,原来第一个星期是存在歧义的。例如上面给的例子,2016年1月1号是周五,那么第一个星期的周四、周三、周二、周日要从下周开始算起,才是第一周。
卧槽,真是一道废题啊,拜拜花费了那么多时间。在此更正本篇文章,以免更多人误解。
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
using namespace std;
const int YEAR = ;
int flag = ;
//平年和闰年的月份所含的天数
//daysOfMonth[0][]表示平年月份的天数
//daysOfMonth[1][]表示闰年月份的天数
int daysOfMonth[][] =
{
{ , , , , , , , , , , , , },
{ , , , , , , , , , , , , }
}; //判断是否为闰年
void judgeIsLeapYear(int year)
{
if ((year % == ) || (year % == && year % != ))
flag = ;
else
flag = ;
} int cmpDays(int y, int m)
{
int days = ;
for (int i = YEAR; i < y; i++)
{
judgeIsLeapYear(i);
if (flag == )
days += ;
else
days += ;
}
judgeIsLeapYear(y);
for (int i = ; i <= m; i++)
days += daysOfMonth[flag][i-];
return days;
} int main()
{
int a, b, c, y1, y2;
int d1, d2;
int count;
int dth;//每月一号是星期几
while (scanf("%d%d%d%d%d", &a, &b, &c, &y1, &y2)!= EOF)
{
for (int i = y1; i <= y2; i++)
{
d1 = cmpDays(i, a);//与1850年1月1日相差的天数
dth = d1 % + ;//当前a月1号是星期几 //计算a月第b个星期星期c的具体日期
//如果当前输入的星期c小于dth表示,第一周的星期c要从下一周算起。
if (c < dth)
count = ;
else
count = ;
d2 = - dth + (b - count) * + c; if (d2 <= daysOfMonth[flag][a])
printf("%d/%02d/%02d\n", i, a, d2);
else
printf("none\n");
}
} return ;
}
给出本人的提交记录:,尼玛都是泪啊,希望以后考试不要出现这样有歧义的题了,卡死人了!

节日(CCF试题)的更多相关文章
- CCF试题:高速公路(Targin)
问题描述 某国有n个城市,为了使得城市间的交通更便利,该国国王打算在城市之间修一些高速公路,由于经费限制,国王打算第一阶段先在部分城市之间修一些单向的高速公路. 现在,大臣们帮国王拟了一个修高速公路的 ...
- CCF 试题编号: 201909-4 试题名称: 推荐系统
这题是stl的综合应用,map要想快,直接上unordered_map,这样查询接近O(1),是不是很嗨皮. 思路其实还是很简单的,type+id做个Hash,由于set.insert的第一个返回值是 ...
- CCF认证历年试题
CCF认证历年试题 不加索引整理会死星人orz 第一题: CCF201712-1 最小差值(100分) CCF201709-1 打酱油(100分) CCF201703-1 分蛋糕(100分) CCF2 ...
- CCF CSP 201503-3 节日
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201503-3 节日 问题描述 有一类节日的日期并不是固定的,而是以“a月的第b个星期c”的形 ...
- CCF 模拟试题——出现次数最多的数 官方答案解析及自己写的正确答案
前几天知道的CCF计算机职业资格认证考试,觉得好像比软考含金量高一些,就去了解了一下,做了模拟试题中的 “出现次数最多的数” 这道题,我的算法和官方答案算法不同,个人觉得觉得官方的好一点,没那么繁琐, ...
- CCF计算机软件能力认证试题练习:201912-5 魔数
CCF计算机软件能力认证试题练习:201912-5 魔数 前置知识:BFS,线段树等 \(f(x) = (x\%A)\%B\) 这个函数值的和直接用线段树维护是不太行的(也可能是我不知道),后来想了很 ...
- CCF 节日
问题描述 有一类节日的日期并不是固定的,而是以"a月的第b个星期c"的形式定下来的,比如说母亲节就定为每年的五月的第二个星期日. 现在,给你a,b,c和y1, y2(1850 ≤ ...
- CCF真题之节日
201503-3 问题描述 有一类节日的日期并不是固定的,而是以“a月的第b个星期c”的形式定下来的,比如说母亲节就定为每年的五月的第二个星期日. 现在,给你a,b,c和y1, y2(1850 ≤ y ...
- ccf练习---节日
问题描述 有一类节日的日期并不是固定的,而是以“a月的第b个星期c”的形式定下来的,比如说母亲节就定为每年的五月的第二个星期日. 现在,给你a,b,c和y1, y2(1850 ≤ y1, y2 ≤ 2 ...
随机推荐
- 数据库分享一: MySQL的Innodb缓存相关优化
无论是对于哪一种数据库来说,缓存技术都是提高数据库性能的关键技术,物理磁盘的访问速度永 远都会与内存的访问速度永远都不是一个数量级的.通过缓存技术无论是在读还是写方面都可以大大提 高数据库整体性能. ...
- Jquery获得子页面中某个元素
本页面中有子框架iframe1.获取iframe1中元素 $("input[name$='svNo']", window.frames["iframe1"].d ...
- angular学习笔记(二十二)-$http.post
基本语法: $http.post('url',{},{}).success(function(data,status,headers,config){ }).error(function(data,s ...
- QT 4.8 静态库编译方法
最最初踏上QT之路是受到了XiaomaGee的指点,相比于常规的窗口程序开发,QT有着以下特点: 1. 优良的跨平台特性(支持Win.Linux.Mac 不同的平台下只需重新编译即可使用) 2. 面向 ...
- u-boot编译
u-boot目的:启动内核1.从flash读出内核,放到SDRAM中2.启动内核 u-boot要实现的功能:-----硬件相关的初始化---- ---开发的功能--------- 关看门够 ...
- [转]解决 Eclipse项目红感叹号
原文地址:http://www.cnblogs.com/hakuci/archive/2012/01/06/2314143.html 原因:显示红色感叹号是因为jar包的路径不对 解决:在项目上右击B ...
- LeetCode: solveSudoku 解题报告
Sudoku SolverWrite a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are in ...
- awk打印指定列以后的所有内容
(1)使用awk将文件的前12列替换为空 awk '{for(i=1;i<=12;i++)$i="";print $0}' localhost_access_log //写法 ...
- Path类与Directory类与File类
阅读目录 开始 Path 对路径 字符串进行操作 获得后缀 能合并路径 获取文件名 Directory和DirectoryInfo 对目录进行操作 判断目录是否存在 创建目录 删除目录 获取目录下所 ...
- setTimeout解读
看一个简单的例子: for(var i=0; i<4; i++){ setTimeout(function(){console.log(i)}, 0); } 请问下这段代码会输出什么呢? 如果你 ...