【C++练习】日期常见题型训练(5道编程题)

news2024/11/17 10:01:10

【C++练习】日期题型训练

  • ①.日期累加
  • ②.日期差值
  • ③.打印日期
  • ④.求1+2+3+...+n(非正常方法)
  • ⑤.计算一年的第几天

①.日期累加

在这里插入图片描述

解题思路:
1. 日期相加相减都要考虑2月的天数情况。
2.写一个可以获取每个月份天数的函数(要讨论闰年情况)。
3.当日期相加超过本月的最大天数时,就需要将月份加一,而天数需要减去当月的天数,当天数还大于当前月份天数,循环上面的操作。当天数小于当前月份天数,循环停止,而最终的day就是剩下的天数。
4.当月份超过12时,就需要将年份加一,而月份需要重新置为1。

#include <iostream>
#include <iterator>
using namespace std;
int GetMonday(int year, int month)
{
    int monday[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
    if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0))
    {
        return 29;
    }
    else
    {
        return monday[month];
    }
}
int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
     
      int year,month,day,day1;
      cin>>year>>month>>day>>day1;
      int total =day+day1;
      while(total>GetMonday(year,month))
      {
         total-=GetMonday( year,  month);
         month++;
         if(month==13)
         {
            year++;
            month=1;
         }
      }
      day=total;

    printf("%4d-%02d-%02d\n",year,month,day);

    }
}

②.日期差值

在这里插入图片描述

解题思路:
1.两个日期相减就是事日期的差值。
2.如何计算差值?从较小的日期不断的叠加,每叠加一次就计数一次,当叠加到较大的日期时,那么计数器上的数值就是差值。
3.需要考虑到闰年2月的情况。
3.需要将一串日期给分割出来。year是前4位。month是56位,day是78位。利用/%来分离。
4.确保是小的日期叠加到大的日期。

#include <iostream>
using namespace std;

int GetMonday(int year, int month)
{
    int monday[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
    if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0))
    {
        return 29;
    }
    else
    {
        return monday[month];
    }
}
int main()
{
    int time1, y1, m1, d1;
    int time2, y2, m2, d2;
    int n = 1;//计数器
    while ((cin >> time1 >> time2))
    {
        if (time1 > time2)//确保time1是小的日期,time2是大的日期,从time1叠加到time2
        {
            int temp = time1;
            time1 = time2;
            time2 = temp;
        }
        y1 = time1 / 10000;
        m1 = time1 % 10000 / 100;
        d1 = time1 % 100;
        y2 = time2 / 10000;
        m2 = time2 % 10000 / 100;
        d2 = time2 % 100;

        while ((y1 < y2) || (m1 < m2) || (d1 < d2))//当满足其中一个条件就说明time1还是小于time2还需要叠加
        {
            d1++;//日期进行叠加
            if (d1 > GetMonday(y1, m1))//到day叠加到大于本月的最大天数时,就需要将月份进一。而天数需要重新置为1,重新叠加。
            {
                m1++;
                d1=1;
            }
            if (m1 == 13)//如果月份超过12,则年份需要进一,月份重新置为1
            {
                y1++;
                m1 = 1;
            }
            n++;//每叠加一次,计数器需要计数一次。
        }
       
        cout << n << endl;
    }

    
}

③.打印日期

在这里插入图片描述

解题思路:
1.就是将天数转化为对应的月份。
2.要考虑闰年2月。
3.月份默认为1月,当天数大于1月天数时,月份加1,将天数减去1月天数。当剩下的天数大于2月天数时,月份再加1,将天数减去2月天数……循环上面的操作,直到天数小于月份的天数时,再终止循环。最终的月份和天数就出来了。

#include <iostream>
using namespace std;
int GetMonday(int year, int month)
{
    int monday[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
    if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0))
    {
        return 29;
    }
    else
    {
        return monday[month];
    }
}
int main()
{
    int year,m;
    int month=1;
    int day=0;
    while(cin>>year>>m)
    {
       for(int i=1;i<=12;i++)
       {
        if(m>GetMonday(year,i))
        {
          month++;
          m-=GetMonday( year,i);
        }
        else {
        break;
        }
       }
       day=m;

       printf("%4d-%02d-%02d",year,month,day);
    }
}

④.求1+2+3+…+n(非正常方法)

在这里插入图片描述

解题思路:
1.不能使用正常的方法来计算。
2.利用构造函数特性。每生成一个对象,就会自动调用构造。
3.创建n个对象,调用n次构造,在构造函数里面进行数值的叠加。
4.要注意当构造函数结束该数值还存在,需要使用静态成员变量。
5.静态成员变量要在类里声明,类外定义。
6.如何获取类里的数据?利用静态成员函数就可以不需要this指针,也可以调用。

class sum{
public:
   sum()//利用构造函数特性,在构造函数里面进行数值叠加
   {
    _ret+=_i;
    ++_i;
   }
   static int GetRet()//最终利用静态成员函数,使结果被外部获取。
   {
        return _ret;
   }
private://静态成员  类里声明
   static int _i;
   static int _ret;
};
int sum::_i=1;//类外定义
int sum::_ret=0;
class Solution {
public:
    int Sum_Solution(int n) {
        
        sum a[n];//调用n次构造函数。
        return sum::GetRet();//调用类里的成员函数需要this指针,单类里的静态成员函数不需要可以直接调用,但需要指明类域。
    }
};

⑤.计算一年的第几天

在这里插入图片描述

解题思路:
1.通过枚举出每个月的天数,然后将其相加即可。
2.需要考虑闰年2月的天数。
3.当月份等于一月时,直接返回当前的天数即可。
4.当月份大于1月时,就从1月开始累计到该月。

#include <iostream>
using namespace std;
 int GetMonday(int year, int month)
    {
        int monday[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
        if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0))
        {
            return 29;
        }
        else
        {
            return monday[month];
        }

    }
    int Day(int year,int month,int day)
    {
            int i = 0;
    int ret = 0;
        for (i = 1; i < month; i++)
        {
            ret += GetMonday(year, i);
        }
        if (month == 1)
        {
            return  day;
        }
            return ret + day;
    }

int main()
{
    int year,month,day;
    cin>>year>>month>>day;
    cout<<Day(year,month,day)<<endl;
     
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最新ai创作系统CHATGPT镜像系统源码+支持GPT4.0+支持ai绘画(MJ)+实时语音识别输入+免费更新版本

AI系统CHATGPT镜像程序源码支持GPT4支持ai绘画实时语音识别输入免费更新版本 一、AI创作系统二、系统介绍三、系统程序下载四、安装教程五、主要功能展示六、更新日志 一、AI创作系统 1、提问&#xff1a;程序已经支持GPT3.5、GPT4.0接口、支持新建会话&#xff0c;上下文记忆…

纷享销客获评“北京市用户满意企业”荣誉称号

近日&#xff0c;北京社会企业质量协会发布了2023年“北京市用户满意企业”名单&#xff0c;纷享销客再次成功入选并获得“北京市用户满意企业”称号。该评定活动由北京市用户满意认定办公室组织推进&#xff0c;北京质协用户评价中心认定实施&#xff0c;经过资料审核、第三方…

MySQL基础篇(day01,复习自用)

MySQL第一天 数据库概述概述RDBMS与非RDBMS关系型数据库设计规则 MySQL环境搭建MySQL的使用演示MySQL图形化管理工具目录结构 数据库概述 概述 RDBMS与非RDBMS 关系型数据库设计规则 MySQL环境搭建 卸载与安装此处省略 MySQL的使用演示 mysql -h 主机名 -P 端口号 -u 用户名…

vue项目搜索页面,点击搜索按钮button页面l刷新2次问题解决(亲测可用!)

vue遇到了一个奇葩的问题&#xff0c;接口什么都没调用但是点击搜索按钮button页面连续刷新两次 起因&#xff1a;写项目时 用原生写了一个按钮&#xff0c;点击页面会刷新 <button type"submit" click"search()"><i class"iconfont icon-s…

记录:win11+anaconda3 pip install 不装在anaconda3 里,非得装C盘

总结放到最前面&#xff1a;anconda 配置好后&#xff0c;pip install 会把包安装到c盘&#xff0c;不要修改site.py文件&#xff0c;问题出在windows用户权限上&#xff0c;修改windows11的文件夹的权限即可 如上&#xff0c;装好anconda之后&#xff0c;pip install 会把库装…

CSS中伪类详解和用法例子详解

文章目录 一、伪类介绍1.伪类选择器2.动态伪类3.结构伪类4.否定伪类5.状态伪类6.目标伪类 一、伪类介绍 1.伪类选择器 动态伪类作用:link链接没有被访问前的样式效果:visited链接被访问后的样式效果:hover鼠标悬停在元素上面时的样式效果:active点击元素时的样式效果&#xf…

flink-sql自定义rabbitmq connector

flink sql 自定义 rabbitmq connector 直接上代码 github 地址&#xff1a; https://github.com/liutaobigdata/flink-sql-rabbitmq-connector SourceFactory 代码 public class RabbitmqTableSourceFactory implements DynamicTableSourceFactory {private static final S…

进阶实战,接口自动化测试——requests文件上传/下载实战代码

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 如果需要发送文件…

record-4.网络

4、网络 技术栈&#xff1a; 1、计算机网络体系结构 OSI分层 &#xff08;7层&#xff09;&#xff1a;物理层、数据链路层&#xff08;网桥&#xff0c;交换机&#xff09;、网络层&#xff08;IP&#xff0c;ICMP&#xff0c;ARP&#xff09;、传输层&#xff08;TCP&…

springboot房屋管理系统

房屋管理系统 springboot房屋管理系统 java房屋管理系统 技术&#xff1a; 基于springboothtml房屋管理系统的设计与实现 运行环境&#xff1a; JAVA版本&#xff1a;JDK1.8 IDE类型&#xff1a;IDEA、Eclipse都可运行 数据库类型&#xff1a;MySql&#xff08;8.x版本都可…

微服务-Gradle的入门和使用

对于一个新的工程拉下来&#xff0c;如果该工程用了gradle。需要学习一下gradle项目管理工具。我在本机macbook M1的环境下操作。 一、配置安装 下载Gradle&#xff1a; https://services.gradle.org/distributions/ 我下载了6.9版本的Gradle 下载好了以后&#xff0c;放到了…

elasticsearch学习篇:初识ES

一、什么是ES 1、基础概念 是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能&#xff0c;可以帮助我们从海量数据中快速找到需要的内容es是elastic stack(ELK)的核心&#xff0c;负责存储、搜索、分析数据。 ELK包括以下内容&#xff1a; ELK被广泛应用在日志数据…

用python实现调用百度图片搜索的API

前言&#xff1a;这段代码是一个简单的图片爬虫程序它可以通过输入关键词&#xff0c;在百度图片中搜索相关图片&#xff0c;并返回一张随机的图片。代码使用Flask框架搭建了一个简单的Web应用&#xff0c;将用户输入的关键词作为参数传递给爬虫程序&#xff0c;然后从百度图片…

观察者模式(Observer)

别名 事件订阅者者&#xff08;Event-Subscriber&#xff09;监听者&#xff08;Listener&#xff09; 定义 观察者是一种行为设计模式&#xff0c;允许你定义一种订阅机制&#xff0c;可在对象事件发生时通知多个“观察”该对象的其他对象。 前言 1. 问题 假如你有两种类…

Linux vfs各种operation操作介绍

1.ext4文件系统定义的各种操作 //普通文件操作 const struct file_operations ext4_file_operations {.llseek ext4_llseek,.read_iter generic_file_read_iter,.write_iter ext4_file_write_iter,.unlocked_ioctl ext4_ioctl, #ifdef CONFIG_COMPAT.compat_ioctl …

【Python基础】- break和continue语句(文末送书4本)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

6 图像处理实现螺纹识别案例(matlab程序)

学习目的&#xff1a;学习识别案例掌握识别方法 2.代码 clear;clc;close all Iimread(luowen1.bmp); %读取螺纹图片 try Irgb2gray(I); %如果是RGB图&#xff0c;则转换成灰度图 catch end figure imshow(I) title(原图&#xff08;半边螺纹&#xff09;) f…

基于pyqt和卷积网络CNN的中文汉字识别

直接上效果演示图&#xff1a; 通过点击按钮可以实现在画板上写汉字识别和加载图片识别两个功能。 视频演示和demo仓库地址在b站视频001期&#xff1a; 到此一游7758258的个人空间-到此一游7758258个人主页-哔哩哔哩视频 所有代码展示&#xff1a; 十分的简洁&#xff0c;主…

【从零开始学习JAVA | 第二十六篇】泛型补充知识

目录 前言&#xff1a; 泛型的更多应用&#xff1a; 泛型类&#xff1a; 泛型方法&#xff1a; 泛型方法&#xff1a; 总结&#xff1a; 前言&#xff1a; 在上一篇文章中我们介绍了泛型的基础知识&#xff0c;也就是在创建集合的时候用到泛型&#xff0c;此时的泛型更多…

关于内存颗粒的地址映射

即便从软件角度&#xff0c;抛开地址译码器讨论内存颗粒中指定位置处的地址&#xff08;DDR中的指定位置的电容&#xff09;也是没有意义的。晶体管没有绝对地址&#xff0c;就如同地理测量中测定位置前需要确定坐标系一样&#xff0c;同一个位置在不同的坐标系中的地址描述可以…