【C++】日期类基础题

news2024/9/23 11:18:34

                                个人主页:CSDN_小八哥向前冲~

                                 所属专栏:C++入门


一些C++基础题目,帮你巩固一下!

目录

关于内存问题

栈和堆基础问题

计算日期到天数的转换

日期差值

日期累加

打印日期


关于内存问题

答案:D     B

第一题:

classA构造了五次,但是代码是delete pclassa,而不是delete [ ]pclassa,只会析构一次,但往往会引发程序崩溃!

第二题:

由于是内置类型,delete 相当于free,所有并不会造成内存泄漏,但是如果是自定义类型,就会程序崩溃!所以不建议!

栈和堆基础问题

答案:C     D

第一题:

A.栈区主要存在局部变量和函数参数,其空间的管理由编译器自动完成,无需手动控制,堆区是自己申请的空间,在不需  要时需要手动释放

B.栈区先定义的变量放到栈底,地址高,后定义的变量放到栈顶,地址低,因此是向下生长的,堆区则相反.

C.频繁的申请空间和释放空间,容易造成内存碎片,甚至内存泄漏,栈区由于是自动管理,不存在此问题.

D.32位系统下,最大的访问内存空间为4G,所以不可能把所有的内存空间当做堆内存使用,故错误.

第二题:

A.堆大小受限于操作系统,而栈空间一般有系统直接分配

B.频繁的申请空间和释放空间,容易造成内存碎片,甚至内存泄漏,栈区由于是自动管理,不存在此问题

C.堆无法静态分配,只能动态分配

D.栈可以通过函数_alloca进行动态分配,不过注意,所分配空间不能通过free或delete进行释放

计算日期到天数的转换

题目:【牛客】日期到天数转换

思路:

比如日期:2012-12-31,我们可以将2012-1-01一直累加到2012-12-31,同时用变量记录差值,就能得到这个日期是这一年的第几天。

但是又有闰年平年的问题,所有我们可以用一个数组管理每个月的天数!

代码:

#include <iostream>
using namespace std;

int main() {
	int year = 0, month = 0, day = 0,sum=0;
	cin >> year >> month >> day;
    int GetMonthday[13]={0,31,28,31,30,31,
    30,31,31,30,31,30,31};
    //判断闰年
    if(year%4==0&&year%100!=0||year%400==0)
        GetMonthday[2]=29;
    //开始累加    
    for(int i=0;i<month;i++)
        sum+=GetMonthday[i];
    sum+=day;
    cout<<sum;
    return 0;
}

日期差值

题目:【牛客】日期差值

思路:

给定了两个日期,让我们求它们之间的差值天数,我们可以将小的日期一直累加到大的日期,同时用变量记录差值,就能得到这个差值天数。

题目输入的是一串数字,我们可以用除和取模的方法得到年月日。

写一个日期类,重载减法,加加等函数。

代码:

#include <iostream>
#include <iterator>
#include <linux/limits.h>
using namespace std;

class Date
{
public:
    friend Date DateCheck(int date);

    Date(int year=0,int month=0,int day=0)
        :_year(year)
        ,_month(month)
        ,_day(day)
        {}
    int GetMonthDay()
    {
        int MonthDay[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;
        return MonthDay[_month];
    }
    bool operator==(Date d)
    {
        return _year==d._year&&_month==d._month&&_day==d._day;
    }
    bool operator!=(Date d)
    {
        return !(*this==d);
    }
    bool operator>(Date d)
    {
        if(_year>d._year) return true;
        else if(_year==d._year)
        {
            if(_month>d._month) return true;
            else if(_month==d._month)
            {
                if(_day>d._day) return true;
            }
        }
        return false;
    }
    Date& operator++()
    {
        _day++;
        if(_day>GetMonthDay())
        {
            _month++;
            _day=1;
            if(_month==13)
            {
                _year++;
                _month=1;
            }
        }
        return *this;
    }
    int operator-(Date d)
    {
        Date max=*this,min=d;
        int sum=0,flage=1;
        if(d>*this) 
        {
            flage=-1;
            max=d;
            min=*this;
        }
        while(min!=max)
        {
            ++min;
            sum++;
        }
        return sum;
    }
private:
    int _year;
    int _month;
    int _day;
};
Date DateCheck(int date)
{
    Date d;
    d._year=date/10000;
    d._day=date%100;
    d._month=date/100%100;
    return d;
}
int main() {
    int date1,date2;
    cin>>date1>>date2;
    Date d1=DateCheck(date1);
    Date d2=DateCheck(date2);
    cout<<d2-d1+1;
    return 0;
}

日期累加

题目:【牛客】日期累加

思路:

给定一个日期,让其加一个天数,计算出新的日期,我们可以将这个日期的日加这个天数,再去将这个新日期计算成合法。

但是又有闰年平年的问题,所有我们可以用一个数组管理每个月的天数!

如果这个新的日期这个月的天数大于合法天数,那么就进行月进位,如果月进位到大于12,就进行年进位,重复操作,直到日期合法。

代码:

#include <iostream>
using namespace std;

int GetMonthDay(int year, int month) {
    int MonthDay[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;
    return MonthDay[month];
}
int main() {
    int m, year, month, day, k;
    cin >> m;
    while (m--) {
        cin >> year >> month >> day >> k;
        day += k;
        while (day > GetMonthDay(year, month)) {
            day -= GetMonthDay(year, month);
            month++;
            if (month == 13) {
                year++;
                month = 1;
            }
        }
        if (month < 10 && day < 10)
            cout << year << "-" << 0 << month << "-" << 0 << day<<endl;
        else if (month < 10)
            cout << year << "-" << 0 << month << "-" << day<<endl;
        else if (day < 10)
            cout << year << "-" << month << "-" << 0 << day<<endl;
        else
            cout << year << "-" << month << "-" << day<<endl;
        

    }
    return 0;
}

打印日期

题目:【牛客】打印日期

思路:

给定一个年份和天数,计算这个年份的日期。

同样的道理,我们就是要将这个日期合法话而已,和上一道题异曲同工之处,不做过多介绍!

只要注意一下输出形式而已!

代码:

#include <iostream>
using namespace std;

int GetMonthDay(int year, int month) {
    int MonthDay[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;
    return MonthDay[month];
}

int main() {
    int year,n;
    while (cin >> year >> n) {
        int month = 1, day = n;
        while (day > GetMonthDay(year, month)) {
            day -= GetMonthDay(year, month);
            month++;
            if (month == 13) {
                year++;
                month = 1;
            }
        }
        if (month < 10 && day < 10)
            cout << year << "-" << 0 << month << "-" << 0 << day << endl;
        else if (month < 10)
            cout << year << "-" << 0 << month << "-" << day << endl;
        else if (day < 10)
            cout << year << "-" << month << "-" << 0 << day << endl;
        else
            cout << year << "-" << month << "-" << day << endl;

    }
    return 0;
}

我们下期见哦!

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

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

相关文章

java重点学习-JVM类加载器+垃圾回收

12.7类加载器 JVM只会运行二进制文件&#xff0c;类加载器的作用就是将字节码文件加载到JVM中&#xff0c;从而让Java程序能够启动起来。 类加载器有哪些 启动类加载器(BootStrap ClassLoader):加载JAVA HOME/jre/lib目录下的库扩展类加载器(ExtClassLoader):主要加载JAVA HOME…

Tensorflow—第五讲卷积神经网络

本讲概述 卷积实际上就是特征提取。本讲我们先了解学习卷积神经网络基础知识&#xff0c;再一步步地学习搭建卷积神经网络&#xff0c;最后会运用卷积神经网络对cifar10 数据集分类。在本讲的最后附上几个经典卷积神经网络&#xff1a;LeNet、AlexNet、VGGNet、InceptionNet和…

开发小程序

由于之前购入的阿里云ECS放着落灰&#xff0c;碰巧又看到个有趣的项目&#xff0c;于是就做了个生成头像的小程序…由于第一次完整发布小程序&#xff0c;记录一下遇到的问题 小程序名称&#xff1a;靓仔创意头像 &#x1f602; 关于小程序 接口请求&#xff0c;在开发过程中…

少儿编程小游戏 | Scratch 射击游戏《开枪!》

在线玩&#xff1a;Scratch射击游戏 : “开枪&#xff01;” 免费下载-小虎鲸Scratch资源站 随着科技的飞速发展&#xff0c;编程已经成为孩子们未来必备的技能之一。而Scratch作为一款专为少儿设计的编程工具&#xff0c;通过可视化的编程方式&#xff0c;让孩子们在玩游戏的过…

JAVA-集合相关

HashMap如何解决哈希冲突的&#xff1f; 计算hash值&#xff0c;基于hashCode计算冲突之后&#xff0c;先是使用链式寻址法当链表长度大于8&#xff0c;且hash表的容量大于60的时候&#xff0c;再添加元素则转化成红黑树 为什么计算hash值是&#xff0c;是将hash地址的值右移1…

代码随想录训练营 Day62打卡 图论part11 Floyd 算法 A * 算法

代码随想录训练营 Day62打卡 图论part11 Floyd 算法 例题&#xff1a;卡码97. 小明逛公园 题目描述 小明喜欢去公园散步&#xff0c;公园内布置了许多的景点&#xff0c;相互之间通过小路连接&#xff0c;小明希望在观看景点的同时&#xff0c;能够节省体力&#xff0c;走最短…

C++速通LeetCode中等第3题-字母异位词分组

双指针法&#xff1a;两个指针分别指向左右边界&#xff0c;记录最大面积&#xff0c;由于面积由短板决定&#xff0c;两个指针中较短的短指针向内移动一格&#xff0c;再次记录最大面积&#xff0c; 直到两指针相遇&#xff0c;得出答案。 class Solution { public:int maxAr…

PyQt / PySide + Pywin32 + ctypes 自定义标题栏窗口 + 完全还原 Windows 原生窗口边框特效项目

项目地址&#xff1a; GitHub - github201014/PyQt-NativeWindow: A class of window include nativeEvent, use PySide or PyQt and Pywin32 and ctypesA class of window include nativeEvent, use PySide or PyQt and Pywin32 and ctypes - github201014/PyQt-NativeWindow…

切换淘宝最新npm镜像源

文章目录 一、前言二、切换淘宝最新npm镜像源2.1 查询最新镜像源2.2 两种方式切换npm镜像源2.2.1 通过npm配置2.2.1 通过cnpm配置 三、总结 一、前言 NPM&#xff08;Node Package Manager&#xff09;&#xff0c;是NodeJs的模块依赖管理工具&#xff0c;用于nodejs模块的安装…

java多线程模拟多个售票员从同一个票池售票

程序功能 这段代码模拟了多个售票员从一个有限的票池中售票的过程。主要功能如下&#xff1a; 票池共有50张票&#xff0c;多个售票员&#xff08;线程&#xff09;并发进行售票。 使用同步机制确保线程安全&#xff0c;避免多个售票员同时出售同一张票。 每个售票员不断检查票…

5.内容创作的未来:ChatGPT如何辅助写作(5/10)

引言 在信息爆炸的时代&#xff0c;内容创作已成为连接品牌与受众、传递信息与知识、以及塑造文化与观念的重要手段。随着数字媒体的兴起&#xff0c;内容创作的需求日益增长&#xff0c;对创作者的写作速度和质量提出了更高的要求。人工智能&#xff08;AI&#xff09;技术的…

PHP全程可视化防伪溯源一体化管理系统小程序源码

全程可视化&#xff0c;防伪溯源新篇章 —— 揭秘一体化管理系统的力量 &#x1f50d; 开篇&#xff1a;透视未来&#xff0c;从源头到终端的安心之旅 在这个信息透明化时代&#xff0c;每一件商品都承载着消费者的信任与期待。而“全程可视化防伪溯源一体化管理系统”&#x…

【网络安全 | 代码审计】PHP无参数RCE

未经许可,不得转载。 文章目录 无参数RCE代码审计1、利用Session ID实现无参数RCE2、利用get_defined_vars ()函数实现无参数RCE3、利用getallheaders()实现无参数RCE4、利用getenv()实现无参数RCE5、利用scandir()实现无参数RCE靶场实例无参数RCE 一般情况下,RCE需要通过传…

Nuxt3部署遇到的问题归纳

fetch Headers is not a constructor 和 _fetch is not a function 这两个问题&#xff0c;本质上都是fetch在服务器上无法正常使用的问题&#xff0c;需要检查本地node版本与线上服务器node版本是否一致。否则在依赖安装上会产生依赖版本差异导致应用无法正常运行。 以下是wi…

若依-原理

1.代码生成器 1.1源码分析 代码生成器分为两个部分&#xff1a; 第一部分涉及将业务表结构导入到系统中 第二部分是点击生成按钮&#xff0c;系统将根据表结构生成相应的前后端代码&#xff0c;并提供下载。 1.表结构说明 gen_table&#xff1a;存储业务表的基本信息 &am…

事件循环event loop入门(基于ESP-IDF)

主要参考资料&#xff1a; 事件循环库: https://docs.espressif.com/projects/esp-idf/zh_CN/stable/esp32/api-reference/system/esp_event.html Event Loop 大白话版: https://www.bilibili.com/video/BV1FD4y1j79J/?spm_id_from333.999.0.0&vd_sourcedd284033cd0c4d1f3…

盘点常见网络安全术语(建议收藏)

1、黑帽 为非法目的进行黑客攻击的人&#xff0c;通常是为了经济利益。他们进入安全网络以销毁&#xff0c;赎回&#xff0c;修改或窃取数据&#xff0c;或使网络无法用于授权用户。这个名字来源于这样一个事实&#xff1a;老式的黑白西部电影中的恶棍很容易被电影观众识别&…

在linux用docker部署MySQL失败

Unable to find image mysql:latest locally docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp 128.121.243.107:443: i/o timeout. See docker run --help. 从网上找解决问题一直说是镜像问题&#xff0c;我原来的镜像是从自…

8-----手机机型维修工具助手 功能较全 涵盖解锁 刷机 修复等选项 维修推荐

上图是一款功能较全的维修加密狗。目前可以无限制 任何人使用。看图片可以了解其中涵盖刷机 解锁 修复分区 查看短接图 安装驱动 修复基带等等选项。而且其中有针对各个机型型号的对应功能操作。以及一些rec5.0相关的操作选项。 通过此博文了解 ★★★★★此工具涵盖的一些…

优秀项目经理需必备的四个项目管理最佳技术

项目经理在项目管理过程中&#xff0c;需要具备多种管理思维以确保项目的顺利进行和成功交付。项目经理要有效地管理好项目&#xff0c;确保项目按时、按质、按预算完成&#xff0c;需要特别关注以下四个方面&#xff1a; 1. 明确项目目标与范围 设定清晰目标&#xff1a;与项目…