对于日期类问题重要的是首先需要将每个月的日期记录下来以及重要的处理闰年的问题,每个月的日期记录下来可以用一个二维数组从第一维记录月份第二维记录是否是闰年即像这样记录

int date[13][2] = {{0,0},{31,31},{28,29},{31,31},{30,30},{31,31},{30,30},{31,31},
                   {31,31},{30,30},{31,31},{30,30},{31,31}};  

对于闰年有一个公式:能被4整除并且不能被100整除的是闰年或者能被400整除的数是闰年代码可以像这样写

bool isLeap(dd a){
    return (a.year % 4 == 0 && a.year % 100 != 0) || a.year % 400 == 0;
}

日期类问题大部分应该都与这样的两个知识点脱不了干系,如清华大学某年复试题

描述

输入年、月、日,计算该天是本年的第几天。

输入描述:

包括三个整数年(1<=Y<=3000)、月(1<=M<=12)、日(1<=D<=31)。

输出描述:

输入可能有多组测试数据,对于每一组测试数据, 输出一个整数,代表Input中的年、月、日对应本年的第几天。

示例1

输入:

1990 9 20
2000 5 1

复制输出:

263
122

代码如下:

#include<iostream>
using namespace std;int date[13][2] = {{0,0},{31,31},{28,29},{31,31},{30,30},{31,31},{30,30},{31,31},{31,31},{30,30},{31,31},{30,30},{31,31}};typedef struct dd{int year;int mon;int day;
}dd;bool isLeap(dd a){return (a.year % 4 == 0 && a.year % 100 != 0) || a.year % 400 == 0;
}int main(){dd a;int res = 0;while(scanf("%d %d %d", &a.year, &a.mon, &a.day) != EOF){res = 0;if(isLeap(a) == true){for(int i = 1;i < a.mon;i++){res += date[i][1];}res += a.day;}else{for(int i = 1;i < a.mon;i++){res += date[i][0];}res += a.day;}cout<<res<<endl;}}

KY222 打印日期

描述

给出年分m和一年中的第n天,算出第n天是几月几号。

输入描述:

输入包括两个整数y(1<=y<=3000),n(1<=n<=366)。

输出描述:

可能有多组测试数据,对于每组数据, 按 yyyy-mm-dd的格式将输入中对应的日期打印出来。

示例1

输入:

2000 3
2000 31
2000 40
2000 60
2000 61
2001 60

复制输出:

2000-01-03
2000-01-31
2000-02-09
2000-02-29
2000-03-01
2001-03-01
#include<iostream>
using namespace std;int date[13][2] = {{0,0},{31,31},{28,29},{31,31},{30,30},{31,31},{30,30},{31,31},{31,31},{30,30},{31,31},{30,30},{31,31}};bool isLeap(int year){return ((year % 100 != 0) && (year % 4 == 0)) || (year % 400 == 0);}int main(){int year = 0,dayt = 0, month = 0, day = 0;while(scanf("%d %d", &year, &dayt) != EOF){month = 1;if(isLeap(year) == true){for(int i = 1; i <= 12; i++){if(dayt > date[i][1]){month++;dayt -= date[i][1];   }else{day = dayt;break;}} }else{for(int i = 1; i <= 12; i++){if(dayt > date[i][0]){month++;dayt -= date[i][0];   }else{day = dayt;break;}}}/*if(month < 10 && day < 10){ //当时没有考虑到用格式控制只是暴力的把每种情况写出来printf("%d-0%d-0%d\n", year, month, day);}else if(month < 10 && day >= 10){printf("%d-0%d-%d\n", year, month, day);}else if(month >= 10 && day < 10){printf("%d-%d-0%d\n", year, month, day);}else if(month >= 10 && day >= 10){printf("%d-%d-%d\n", year, month, day);}*/printf("%04d-%02d-%02d", year, month, day);//上面的if语句可以直接写成此语句}
}

KY258 日期累加

描述

设计一个程序能计算一个日期加上若干天后是什么日期。

输入描述:

输入第一行表示样例个数m,接下来m行每行四个整数分别表示年月日和累加的天数。

输出描述:

输出m行,每行按yyyy-mm-dd的个数输出。

示例1

输入:

1
2008 2 3 100

复制输出:

2008-05-
#include<iostream>
#include<cstdio>
using namespace std;int date[13][2] = {{0,0},{31,31},{28,29},{31,31},{30,30},{31,31},{30,30},{31,31},{31,31},{30,30},{31,31},{30,30},{31,31}};bool isLeap(int year){return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);}int yearNumber(int year){if(isLeap(year)){return 366;}else{return 365;}}int main(){int year = 0, month = 0, day = 0, n = 0, number = 0; //number记录天数cin>>n;while(n--){scanf("%d %d %d %d", &year, &month, &day, &number);int t = isLeap(year);int i = 1;for(int i = 1; i < month; i++){number+= date[i][t];}number += day;while(number > yearNumber(year)){ /*确定年份,由于把年份累加上去可能超过本年的天数,故需要对年份进行处理,如果加上去超过一年则年份加一,加的天数减去一年的天数*/number -= yearNumber(year);year++;}month = 1;t = isLeap(year);while(number > date[month][t]){ //确定月份number -= date[month][t];month++;}day = number;printf("%04d-%02d-%02d\n", year, month, day);}}

牛客复试上机题 日期问题:相关推荐

  1. 牛客网刷题之SQL篇:非技术快速入门39T

    导航 前序 一.简单的关键字练习 1-10 二.知识点复习之 ==运算符== 1.算数运算符 2.比较运算符 3.逻辑运算符 4.位运算符 三.10-28T 0.简单题总结 1. SQL18 ==分组 ...

  2. 牛客网sql题库(1-30题)—— 个人答案与过程解析

    本篇博客分享一下我在牛客网sql题库刷题时,自己敲出来的结果.结果均通过了牛客网的结果验证. 具体的题目就不放在博客中了,感兴趣可以自行去搜索牛客网,找到sql题库在线编程 每道题下面都有我自己写的题 ...

  3. python爬取学校题库_如何使用 Python 爬虫爬取牛客网 Java 题库?

    [原文链接]http://www.changxuan.top/?p=146 由于"打怪"失败,最近一直在牛客网上刷题复习备战春招.其中有个 Java专题复习题库,我刷着刷着就想把它 ...

  4. c语言cin n1 n2,牛客等级之题N1 追债之旅 - N2 Rinne Loves Study(8.6场)

    牛客等级之题N1-A.追债之旅(8.6场) 题目描述 小明现在要追讨一笔债务,已知有n座城市,每个城市都有编号,城市与城市之间存在道路相连(每条道路都是双向的),经过任意一条道路需要支付费用.小明一开 ...

  5. 力扣牛客每日刷题(Python解法持续更新)

    力扣牛客每日刷题(持续更新) 初试结束第15天, 之前简单的处理了部分毕设方面的任务, 对接下来的学习做了个简单的规划 决定每天开始刷几道力扣题提高一下算法的理解,不能让之前学的数据结构都忘记了 每道 ...

  6. 北京理工大学2000年复试上机题

    北京理工大学2000年复试上机题 一个数如果恰好等于它的各因子(该数本身除外)子和,如: 6=3+2+1,则称其为"完数":若因子之和大于该数,则称其为"盈数" ...

  7. 如何使用 Python 爬虫爬取牛客网 Java 题库?

    [原文链接]http://www.changxuan.top/?p=146 由于"打怪"失败,最近一直在牛客网上刷题复习备战春招.其中有个 Java专题复习题库,我刷着刷着就想把它 ...

  8. 牛客网刷题记录 || 结构体和类

    这是牛客网刷题记录专栏第五篇博文,先给大家简单介绍一下牛客网,牛客网是一个集笔面试系统.题库.课程教育.社群交流.招聘内推于一体的优质网站,牛客网题库中包含几万道题目,注重通过边学边练的模式揽获编程人 ...

  9. C++ 牛客网做题总结

    20天的刷完1234道牛客网C++题,正确率嘛,还算可以,一般~ 1:正确率63% 2:查缺补漏,复习了非常非常多的知识点:牛客网做题笔记 3:当时主要的目的是为了笔试做准备的,找工作的第一关嘛,到时 ...

最新文章

  1. 二极管7种应用电路详解之七
  2. JAVA基础——最简单的多重循环程序
  3. 使用POI进行数据导出excel时的OOM服务挂掉,cpu飙升的问题
  4. Win11 的日历 替代
  5. iphone屏幕突然变暗_如果你的iPhone屏幕突然变暗,可以这样解决
  6. centos关闭防火墙
  7. 安装electron-react-boilerplate遇到的问题
  8. linux执行sql脚本db2,DB2批量执行SQL脚本的实现
  9. office2010安装需MSXML版本6.10.1129.0详解解决方案
  10. 链路聚合的介绍以及配置
  11. Dlib库实现人脸关键点检测(Opencv实现)
  12. 【论文解读】 FPGA实现卷积神经网络CNN(二): Optimizing FPGA-based Accelerator Design for DCNN
  13. 计算机专业的浪漫情话,计算机学科的告白情话
  14. 看懂卫星遥感数据RPC文件
  15. 基于stm32的智能小车(远程控制、避障、循迹)
  16. 折叠留言楼层,递归无线循环
  17. 【将金令】1.5金评:洗尽铅华,静待多空拉锯
  18. 【已解决】‘node‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件 / 全新安装node
  19. iis tomcat php,IIS7 与 Tomcat8共用端口(ISAPI)
  20. 解决Vue打包部署到Nginx时,css样式不生效问题

热门文章

  1. 【js】三种获取时间戳的方法
  2. 制作grub多重引导光盘镜像(原创)
  3. CF1677D-Tokitsukaze and Permutations【结论】
  4. 职业高中计算机专业能考哪些大学,职高可以考的大学名单 职高能考一本和二本吗...
  5. 各路资本围绕大数据的争夺与征战才刚刚开始
  6. 【java迭代器Iterator】获取单个元素,循环遍历和删除
  7. 设备调试之PVLAN技术实践
  8. i7 4790配什么主板好
  9. 用pycatia给出一个半径为10mm的球体零件沿着一个半径为100mm的圆曲线作圆周运动的代码案例...
  10. js弹出消息对话框(alert)的几种方式