类和对象 - 练习题(C++)

news2025/4/28 10:24:57

目录

1、求1+2+3+...+n

题目链接:

题目:

题目描述:

解题思路:

代码:

2 计算日期到天数转换

题目链接:

题目:

题目描述:

解题思路:

代码:

3 日期差值

题目链接:

题目:

题目描述:

解题思路:

代码:

4 打印日期

题目链接:

题目:

题目描述:

解题思路:

代码:

5 日期累加

题目链接:

题目:

题目描述:

解题思路:

代码:


1、求1+2+3+...+n

题目链接:

求1+2+3+……+nicon-default.png?t=N4HBhttps://www.nowcoder.com/practice/7a0da8fc483247ff8800059e12d7caf1?tpId=13&tqId=11200&tPage=3&rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

题目:

​​​​​​​题目描述:

描述

求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

数据范围: 0<�≤2000<n≤200
进阶: 空间复杂度 �(1)O(1) ,时间复杂度 �(�)O(n)

示例1

输入:

5

返回值:15

示例2

输入:

1

返回值:1


解题思路:

运用类的static成员变量的特性进行求解,单独再定义一个类,给定两个静态成员,一个是用来计数的,另一个是用来求和的,随后在该类的构造函数中让计数的静态成员+1,并将计数的静态变量+到求和静态变量中,也就是只要调用构造函数,就会对静态成员变量进行++并求和。再另一个类中定义一个有静态成员类的数组,数组个数为n。随后将最后的求和静态变量返回即可!


代码:

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];
    return Sum::GetRet();       
    }
};

2 计算日期到天数转换

题目链接:

HJ73 计算日期到天数转换icon-default.png?t=N4HBhttps://www.nowcoder.com/practice/769d45d455fe40b385ba32f97e7bcded?tpId=37&&tqId=21296&rp=1&ru=/activity/oj&qru=/ta/huawei/question-ranking

题目:

题目描述:

描述

根据输入的日期,计算是这一年的第几天。

保证年份为4位数且日期合法。

进阶:时间复杂度: O(n) ,空间复杂度: O(1) 

输入描述:

输入一行,每行空格分割,分别是年,月,日

输出描述:

输出是这一年的第几天

示例1

输入:

2012 12 31

输出:

366

示例2

输入:

1982 3 4

输出:

63

解题思路:

分别定义三个变量,输入年月日,再利用计算月份天数的函数,把该年从一月到我们所输入月之间的每个月的天数累加起来,最后再加上我们输入的天数!就是该年的天数


代码:

#include <iostream>
using namespace std;

//计算月份天数函数
int GetMonthDay(int year,int month)
{
    static int Day[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 Day[month];
}

int main() 
{
    int year=0;
    int month=0;
    int day=0;
    cin>>year>>month>>day;

    int sum=0;//求和
    int i=1;
    while(i<month)
    {
        //累加天数
        sum+=GetMonthDay(year, i);
        i++;
    }
    //再加上我们的输入的天数
    sum+=day;
    cout<<sum;

}

3 日期差值

题目链接:

KY111 日期差值icon-default.png?t=N4HBhttps://www.nowcoder.com/practice/ccb7383c76fc48d2bbc27a2a6319631c?tpId=62&&tqId=29468&rp=1&ru=/activity/oj&qru=/ta/sju-kaoyan/question-ranking

题目:

题目描述:

描述

有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天

输入描述:

有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD

输出描述:

每组数据输出一行,即日期差值

示例1

输入:

20110412
20110422

输出:

11

解题思路:

首先输入的是两个整数,需要将整数按照时间日期和天数的格式,分别格式化输入到三个变量中,随后定义一个日期类,分别用输入的日期来构造对象,两个日期之间的天数,就是让小的日期每次+1天,++到跟大的日期相等就是他们之间的天数!


代码:

#include <iostream>
using namespace std;
 
class Date
{
public:
    //构造函数
    Date(int year = 1, int month = 1, int day = 1)
        :_year(year),
        _month(month),
        _day(day)
    {}
 
    //日期天数函数
    int GetMonthDay(int year, int month)
    {
        static 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;
        }
        return MonDay[month];
    }
 
    //重载+=运算符
    Date& operator+=(const Date& d)
    {
        _day += d._day;
        while (_day > GetMonthDay(_year, _month))
        {
            _day -= GetMonthDay(_year, _month);
            ++_month;
            if (_month == 13)
            {
                ++_year;
                _month = 1;
            }
        }
        return *this;
    }
 
    //重载==运算符
    bool operator==(const Date& d)
    {
        return _year == d._year
            && _month == d._month
            && _day == d._day;
    }
 
    //重载!=运算符
    bool operator!=(const Date& d)
    {
        return !(*this == d);
    }
 
    //重载++运算符
    Date& operator++()
    {
        *this += 1;
        return *this;
    }
 
    //重载>运算符
    bool operator>(const Date& d)const
    {
        if (_year > d._year)
        {
            return true;
        }
        else if (_year == d._year && _month > d._month)
        {
            return true;
        }
        else if (_year == d._year && _month == d._month && _day > d._day)
        {
            return true;
        }
        return false;
    }
 
private:
    int _year;
    int _month;
    int _day;
};

int main() 
{
    int year1=0;
    int month1=0;
    int day1=0;

    int year2=0;
    int month2=0;
    int day2=0;

    scanf("%4d %2d %2d",&year1,&month1,&day1);
    scanf("%4d %2d %2d",&year2,&month2,&day2);

    Date d1(year1,month1,day1);
    Date d2(year2,month2,day2);

    Date max=d1;
    Date min=d2;
    if(d2>d1)
    {
        max=d2;
        min=d1;
    }

    int day=0;//天数
    while(min!=max)
    {
        ++day;
        ++min;
    }

    cout<<day+1<<endl;

    // cout<<year1<<" "<<month1<<" "<<day1<<endl;
    // cout<<year2<<" "<<month2<<" "<<day2<<endl;
    return 0;
}

4 打印日期

题目链接:

KY222 打印日期给出年分m和一年中的第n天,算出第n天是几月几号。。题目来自【牛客题霸】https://www.nowcoder.com/practice/b1f7a77416194fd3abd63737cdfcf82b?tpId=69&&tqId=29669&rp=1&ru=/activity/oj&qru=/ta/hust-kaoyan/question-ranking

题目:

题目描述:

描述

给出年分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;
 
//日期类
class Date
{
public:
    //构造函数
    Date(int year = 0, int month = 0, int day = 0)
        :_year(year),
        _month(month),
        _day(day)
    {}
     
    static int GetMonthDay(int year, int month)
    {
        static int Day[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 Day[month];
    }
 
    //重载+运算符 (日期+天数)
    Date operator+(int day)
    {
        Date tmp = *this;
        tmp._day += day;
        while (tmp._day > GetMonthDay(tmp._year, tmp._month))
        {
            tmp._day -= GetMonthDay(tmp._year, tmp._month);
            ++tmp._month;
            if (tmp._month == 13)
            {
                ++tmp._year;
                tmp._month = 1;
            }
        }
        return tmp;
    }
 
    //打印
    void Print()
    {
        printf("%d-%02d-%02d\n", _year, _month, _day);
    }
private:
    int _year;
    int _month;
    int _day;
};
int main()
{
    int year=0;
    int day=0;
    while(cin>>year>>day)
    {
        Date d1(year);
        Date tmp=d1+day;
        tmp.Print();
    }
}

5 日期累加

题目链接:

KY258 日期累加设计一个程序能计算一个日期加上若干天后是什么日期。。题目来自【牛客题霸】https://www.nowcoder.com/practice/eebb2983b7bf40408a1360efb33f9e5d?tpId=40&&tqId=31013&rp=1&ru=/activity/oj&qru=/ta/kaoyan/question-ranking

题目:

题目描述:

描述

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

输入描述:

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

输出描述:

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

示例1

输入:

1
2008 2 3 100

输出:

2008-05-13

解题思路:

写一个日期类,重载+ 运算符(日期+天数),再写一个计算日期函数即可!


代码:

#include <iostream>
using namespace std;
//日期类
class Date
{
public:
    //构造函数
    Date(int year = 0, int month = 0, int day = 0)
        :_year(year),
        _month(month),
        _day(day)
    {}
     
    static int GetMonthDay(int year, int month)
    {
        static int Day[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 Day[month];
    }
 
    //重载+运算符 (日期+天数)
    Date operator+(int day)
    {
        Date tmp = *this;
        tmp._day += day;
        while (tmp._day > GetMonthDay(tmp._year, tmp._month))
        {
            tmp._day -= GetMonthDay(tmp._year, tmp._month);
            ++tmp._month;
            if (tmp._month == 13)
            {
                ++tmp._year;
                tmp._month = 1;
            }
        }
        return tmp;
    }
 
    //打印
    void Print()
    {
        printf("%d-%02d-%02d\n", _year, _month, _day);
    }
private:
    int _year;
    int _month;
    int _day;
};
 
int main() {
    int n=0;
    cin>>n;
    int year=0;
    int month=0;
    int day=0;
    int m=0;
    while(n--)
    {
        cin>>year>>month>>day>>m;
        Date d1(year,month,day);
        Date tmp=d1+m;
        tmp.Print();
    }
}

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

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

相关文章

人工智能学习07--pytorch18--目标检测:Faster RCNN源码解析(pytorch)

参考博客&#xff1a; https://blog.csdn.net/weixin_46676835/article/details/130175898 VOC2012 1、代码的使用 查看pytorch中的faster-rcnn源码&#xff1a; 在pytorch中导入&#xff1a; import torchvision.models.detection.faster_rcnn即可找到faster rcnn所实现的源…

NIFI分页获取Postgresql数据到Hbase中_实际操作---大数据之Nifi工作笔记0049

首先看一下整体流程,可以看到这里用的PutHbaseJson处理器,把数据导入到 hbase中的 注意这里也可以使用PutSql导入数据,通过phoenix的jdbc驱动,然后把数据利用PutSql处理器导入到 Hbase中,但是我这里的时候报错了,然后一直没解决,所以最后用了PutHbaseJson处理器,把数据存入到…

【LinuxShell】linux防火墙之SNAT策略和DNAT策略

文章目录 前言一、SANT策略1.SNAT策略概述2.SNAT的典型应用环境3.SNAT的工作原理4.SNAT策略的应用SNAT转换前提条件SNAT策略打开方式SNAT实验过程 5.知识扩展 二、DNAT策略1.DNAT策略概述2.DNAT的典型应用环境3.DNAT的工作原理4.DNAT策略的应用DNAT转换前提条件DNAT地址转换方式…

linux管道通信原理

管道&#xff0c;通常指无名管道&#xff0c;是 UNIX 系统IPC&#xff08;InterProcess Communication)最古老的形式。 1、特点: 1.它是半双工的(即数据只能在一个方向上流动) &#xff0c;具有固定的读端和写端 2.它只能用于具有亲缘关系的进程之间的通信(也是子进程或者兄弟进…

python 读写 json,csv,txt,docx,xlsx,xls文件大全

目录 前言一、读写json1.1 读1.2 写1.2.1 list类型写入1.2.2 dict类型写入 二、读写csv2.1 读2.2 写2.2.1 list类型写入2.2.2 dict类型写入 三、读写txt3.1 读3.2 写按行写入&#xff08;手动添加换行符\n&#xff09;按行写入&#xff08;python添加换行符\n&#xff09;3.2.1…

Linux:Firewalld防火墙

Linux&#xff1a;Firewalld防火墙 一、Firewanlld防火墙概述二、Firewalld和Iptables的关系三、Firewalld网络区域3.1 Firewalld 区域的概念&#xff1a;3.2 firewalld防火墙预定义了9个区域3.3 firewalld数据处理流程 四、Firewalld防火墙的配置方法五、Firewalld-config图形…

RHCSA 8考题超级详细解析(2022最新版)本人已过

文章目录 1.配置IP地址2、配置软件仓库3、调试SELinux4、创建用户账户5. 配置cron计划任务6、创建共享目录7、配置NTP时间客户端8. auto自动挂载9、配置文件权限10、配置用户账户11、查找文件12、查找字符串13、 创建归档14、配置sudo提权15、设置密码默认策略16、配置umask值1…

海格里斯HEGERLS库架合一|仓储托盘四向穿梭车在冷库冷链行业中的应用

当前的物流行业正在从劳动密集型向技术密集型转变&#xff0c;物流系统越来越明显的向呈现出自动化、数字化、柔性化、智能化的发展趋势。以堆垛机为代表的自动化仓储系统&#xff0c;取货对场地要求比较高&#xff0c;多建在12M以上的新仓库。而对于不规则的、层高较低的老仓库…

【python资料】热图和Matplotlib.imshow()函数

一、说明 Matplotlib是一个强大的Python数据可视化库&#xff0c;可以绘制各种类型的图形&#xff0c;其中包括热图。热图通常用于表现数据的分布和趋势。本文用一个简单的例子&#xff0c;告诉大家用Matplotlib绘制热图的基本操作语句。 二、热图的概念 2.1 基本概念 热图&am…

7EBG-10-C-B-107EBG-20-B-B-10比例先导溢流阀放大板

7EBG-10-B-B-10、7EBG-20-C-B-10、7EBG-30-H-B-10、7EBG-10-C-B-10、7EBG-20-B-B-10、7EBG-30-C-B-10特性&#xff1a; ● 该阀是由高性能型比例先导式溢流阀和低噪音型溢流阀组合而成&#xff0c;进行压力与输入电流成比例的压力控制&#xff0c;能够达到无段式控制特性。 ●…

c++(内存管理)

本节目标&#xff1a; 1、c/c内存分布 2、c语言中动态内存管理方式 3、c中动态内存管理 4、operator new 与 operator delete函数 5、new和delete的实现原理 6、定位new表达式&#xff08;placement - new&#xff09; 7、常见面试题 目录 1.c/c内存分布 2、c语言中动…

StringRedisTemplate和RedisTemplate的区别

StringRedisTemplate和RedisTemplate的区别 springboot提供了两种redis访问工具类StringRedisTemplate和RedisTemplate&#xff0c;为什么spring官方会提供两种不同redis访问工具呢&#xff1f;两者主要的的区别在于redis的key和value的序列化方式不同&#xff0c;并且StringR…

手把手教你制作AI孙燕姿,让你的抖音视频火遍全网!

最近“AI孙燕姿”翻唱”的《发如雪》《爱在西元前》等歌曲在B站、抖音、快手等短视频平台爆火&#xff0c;截止到发稿前抖音的播放量已经超1700万。 目前AI孙燕姿制作教程资料较少&#xff0c;网上搜到几个都是使用开源项目Sovits来训练模型&#xff0c;使用门槛较高。 本文以…

云时通 X 九毛九 | SRM系统助力连锁餐饮行业高效管理供应链

餐饮行业作为第三产业中的传统服务性行业之一&#xff0c;始终保持旺盛的发展势头&#xff0c;随着时代的进步&#xff0c;现代餐饮企业更多以连锁业态发展&#xff0c;其特点是多种形式相结合而生&#xff0c;将新颖的就餐空间与潮流文化和传统的经典美味互相融合&#xff0c;…

​数据库原理及应用上机(实验五 SQL的数据更新)

✨作者&#xff1a;命运之光 ✨专栏&#xff1a;数据库原理及应用上机实验 &#x1f353;&#x1f353;前言&#xff1a; 数据库原理及应用上机实验报告的一个简单整理后期还会不断完善&#x1f353;&#x1f353; ✨一、实验目的和要求 掌握SQL数据插入、修改和删除语句的一…

多大一口气能将汽车吹上天,你算出来了吗?

多大一口气能将汽车吹上天&#xff0c;你算出来了吗?起来了解其中的原理&#xff0c;手把手教你如何计算汽车起飞所需的风速! 空气同时通过机翼上表面和下表面时&#xff0c;会在机翼上下方形成不同流速&#xff0c;空气通过机翼上表面时流速大&#xff0c;压强较小;通过下表面…

设计模式之【中介者模式】,多对多关系降级为一对多关系的利器

文章目录 一、什么是中介者模式1、中介者模式的优势2、中介者模式的缺点3、中介者模式的应用场景4、中介者模式的四大角色5、观察者模式和中介模式的区别 二、实例1、中介者模式的一般写法2、租房中介案例3、智能家具案例 三、源码中的中介者模式1、Timer 一、什么是中介者模式…

Spring MVC 中的视图解析器是什么?如何配置它

当我们使用 Spring MVC 框架进行 Web 开发时&#xff0c;视图解析器&#xff08;View Resolver&#xff09;是一个非常重要的组件&#xff0c;它负责将控制器&#xff08;Controller&#xff09;所产生的逻辑视图名称&#xff08;Logical View Name&#xff09;转换成实际的视图…

Go语言环境搭建(内附网P下载地址)

一、Golang语言的官网 首先我们登录Golang的官方网站&#xff1a;https://golang.org/ 因为Google和中国的关系&#xff0c;直接登录Golang的官网&#xff0c;需要翻墙。 当然你也可以登录Golang的国内网站&#xff1a;https://golang.google.cn/ 二、下载 在Mac、Windows和L…

2023贵工程团体程序设计赛--赛后总结

本次比赛共27支队伍参加&#xff0c;总计135人&#xff0c;其中一支队伍为出题组&#xff08;不计入最后排名&#xff09;。实际参赛130人&#xff0c;5人缺考&#xff08;1人未加入题集&#xff09;。 1.人员分布 信息工程学院&#xff1a;22计科2支队伍&#xff0c;22软件6…