C++类相关oj题目分享(计算日期到天数转换、日期差值、打印日期、日期累加)

文章目录

  • 1.计算日期到天数转换
    • 题目详情
    • 代码
    • 思路
  • 2.KY111 日期差值
    • 题目详情
    • 代码
    • 思路
  • 3.KY222 打印日期
    • 题目详情
    • 代码
  • 4.KY258 日期累加
    • 题目详情
    • 代码
    • 思路

1.计算日期到天数转换

传送门

题目详情

在这里插入图片描述

代码

#include <iostream>
using namespace std;
int GetDay(int year,int month)
{int DayOfMonth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};if(month==2&&(year%400==0||(year % 4 == 0 && year % 100 )) ){return 29;}return DayOfMonth[month];
}int main() {int year;int month;int day;cin>>year>>month>>day;int sum=0;for(int i=1;i<month;i++){sum+=GetDay(year, i);}cout<<sum+day;
}

思路

首先我们知道肯定是用一个数组来储存每个月的天数,更加方便。同时默认2月是28天,如果是闰年就是29。
总体的计算思路是:1月到month-1月的所有天数,加上month月的day。使用for循环能正好契合这个思路
当然这题的思路和解法非常多,我这也只是其中一个。

2.KY111 日期差值

传送门

题目详情

在这里插入图片描述

代码

int GetDay(int year, int month) {//返回一年中哪一个月的天数int DayOfMonth[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};if (month == 2 && (year % 400 == 0 || (year % 4 == 0 && year % 100 )) ) {return 29;}return DayOfMonth[month];
}int Sum(int a, int b) {int max = b;int min = a;int flag = 1;if (a > b) {flag = -1;max = a;min = b;}int day1 = min % 100;int month1 = (min / 100) % 100;int year1 = min / 10000;int day2 = max % 100;int month2 = (max / 100) % 100;int year2 = max / 10000;int count = 1;while ((year1 < year2) || (month1 < month2) || (day1 < day2)) {day1++;if (day1 > GetDay(year1, month1)) { //如果满了当月天数month1++;//跳到下一个月,天数变为1号day1 = 1;}if (month1 == 13) { //如果满了当年月数year1++;//跳到下一年,月数变为1月month1 = 1;}count++;}return flag * count;
}int main() {int a, b;while (cin >> a >> b) {cout << Sum(a, b) << endl;}return 0;
}
}

思路

  1. 首先我们要处理连续输入,之前是使用while(scanf(…)!=EOF)
  • 现在也可以,但毕竟是c++。可以用while(cin<<…)
    因为:例如上面,当使用 while(cin >> a >> b) 时,如果输入操作成功(即用户输入了两个整数),cin 的布尔值为 true,循环会继续执行。如果输入操作失败(例如遇到文件结束符。在 Windows 中是 Ctrl+Z,Linux/macOS 中是 Ctrl+D。这样程序会结束循环并终止执行),cin 的布尔值为 false,循环会终止
  1. 思路是找到二者中较小的,再进行拆分。根据只要二者不相等,day1(较小的)就++;天数满了,月满了再进行处理。每一次count++。

3.KY222 打印日期

传送门

题目详情

在这里插入图片描述

代码

#include <iostream>
using namespace std;int main() {int year, sum_day;while (cin >> year >> sum_day) {// 注意 while 处理多个 caseint DayOfMonth[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};if (year % 400 == 0 || (year % 4 == 0 && year % 100 )) {DayOfMonth[2]++;}int month=1;while(sum_day>DayOfMonth[month]){sum_day-=DayOfMonth[month];++month;if(sum_day==DayOfMonth[month]){++month;sum_day=1;break;}}printf("%d-%02d-%02d",year,month,sum_day);}
}

4.KY258 日期累加

传送门

题目详情

在这里插入图片描述

代码

#include <cfloat>
#include <iostream>
using namespace std;
int GetDay(int year, int month) //返回一年中哪一个月的天数
{int DayOfMonth[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};if (month == 2 && (year % 400 == 0 || (year % 4 == 0 && year % 100 )) ) {return 29;}return DayOfMonth[month];
}int main() {int num;cin>>num;while (num--) {int year, month, day,add_day;cin >> year >> month >> day>>add_day;while(add_day--){++day;if (day > GetDay(year, month)){++month;day=1;}if(month==13){year++;month=1;} }printf("%d-%02d-%02d\n",year,month,day);}return 0;}

思路

这题大家要注意题目的输入和输出要求,我自己在这上面浪费了好多多少。


今天就到这里啦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/415811.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt/C++中英输入法/嵌入式输入法/小数字面板/简繁切换/特殊字符/支持Qt456

一、前言 在嵌入式板子上由于没有系统层面的输入法支持&#xff0c;所以都绕不开一个问题&#xff0c;那就是在需要输入的UI软件中&#xff0c;必须提供一个输入法来进行输入&#xff0c;大概从Qt5.7开始官方提供了输入法的源码&#xff0c;作为插件的形式加入到Qt中&#xff…

【docker】安装 CentOS

查看可用的 CentOS版本 docker search centOS拉取 CentOS最新镜像 docker pull centos:latest 查看本地镜像 docker images运行容器 docker run -itd --name centos-demo centos查看进程 docker ps进入centos容器 docker exec -it centos-demo /bin/bash停止容器 docker …

Autosar信息安全入门系列01-SecOC基础介绍

本文框架 1. 概述2. SecOC基本概念2.1 SecOC是什么&#xff1f;2.2 新鲜度值与MAC值2.3 SecOC报文格式 3. SecOC报文发送及接收逻辑3.1 SecOC报文的发送3.2 SecOC报文的接收 1. 概述 本文为Autosar通信入门系列介绍&#xff0c;如您对AutosarMCAL配置&#xff0c;通信&#xf…

C++编写、生成、调用so库详解(二)

我们上篇中主要讲了怎么去打包so库 C编写、生成、调用so库详解(一) 这篇我们就来说一些怎么调用so库 目录 1.调用符合JNI标准的so库 2.调用不符合JNI标准的so库 上面说了两种不同类型的so库,我们分别来看一下怎么调用这两种,在调用so库之前,我们先说一下直接调用上面写的C…

解决Uniapp插件市场试用原生插件项目 没有MD5签名安卓无法自定基座打包的情况

Uniapp插件市场中&#xff0c;有些插件是原生插件&#xff0c;必须使用自定义基座才能打包。但是传统keytool命令&#xff0c;已经无法看到安卓证书的MD5签名。现采用Android Studio查询signingReport的办法获取证书的MD5签名&#xff0c;并对插件的示例项目进行打包运行。一、…

烟火检测/周界入侵/视频智能识别AI智能分析网关V4如何配置ONVIF摄像机接入

AI边缘计算智能分析网关V4性能高、功耗低、检测速度快&#xff0c;易安装、易维护&#xff0c;硬件内置了近40种AI算法模型&#xff0c;支持对接入的视频图像进行人、车、物、行为等实时检测分析&#xff0c;上报识别结果&#xff0c;并能进行语音告警播放。算法可按需组合、按…

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例4-5 select

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>select</title> </head><body> <!--单选下拉菜单可设置默认选中项--> 所在城市&#xff08;单选&#xff09;:<br> <select>…

广告灯的左移右移

1&#xff0e;  实验任务 做单一灯的左移右移&#xff0c;硬件电路如图4.4.1所示&#xff0c;八个发光二极管L1&#xff0d;L8分别接在单片机的P1.0&#xff0d;P1.7接口上&#xff0c;输出“0”时&#xff0c;发光二极管亮&#xff0c;开始时&#xff0c;P1.0→P1.1→P1.2→…

Oracle 数据库备份与恢复的重要性与最佳实践

文章目录 一、备份的重要性二、备份工具-RMAN四、比较备份策略五、实例恢复六、完全恢复与不完全恢复七、备份与恢复脚本 引言&#xff1a; 在现代信息时代&#xff0c;数据已成为组织和企业最重要的资产之一。保护和恢复数据的能力对于确保业务连续性和减少潜在风险至关重要。…

传感器产业链图谱及上中下游市场剖析(附产业链全景图)

传感器是一种通常由敏感元件和转换元件组成的检测装置&#xff0c;测量并感知信息后&#xff0c;通过变换让传感器中的数据或价值信息转换成电信号或其他所需形式的输出&#xff0c;以满足信息的传输、处理、存储、显示、记录和控制等要求。 传感器产业链包括上游原材料、生产设…

【LeetCode】202. 快乐数(简单)——代码随想录算法训练营Day06

题目链接&#xff1a;202. 快乐数 题目描述 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终…

CUDA tips

命令行查看核函数消耗的寄存器和共享内存数量 nvcc --ptxas-options-v reduce_sum.cu nvprof 使用 由于 8.0 及以上计算能力的显卡用不了 nvprof&#xff0c;官方建议用 nsight system 和 ncu&#xff0c;但是如果只想命令行打印表格查看 kernel 概况感觉还是 nvprof 方便&am…