牛客网习题——通过C++实现

一、目标

实现下面4道练习题增强C++代码能力。

1.求1+2+3+...+n_牛客题霸_牛客网 (nowcoder.com)

2.计算日期到天数转换_牛客题霸_牛客网 (nowcoder.com)

3.日期差值_牛客题霸_牛客网 (nowcoder.com)

4.打印日期_牛客题霸_牛客网 (nowcoder.com)

二、对目标的实现

 1.求1+2+3+...+n_牛客题霸_牛客网 (nowcoder.com)

思路讲解:

        对于这道题来说,通过描述可知,求前n项和这一操作如果没有限制的话想必大家都会,但这题的复杂点就在于后一句:要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。这句话说白了就是限制了你使用循环和递归等操作,那么我们该怎么解决这个问题呢。

        那么我们现在就可以借助在C++类和对象中介绍的静态成员函数和静态成员变量来解决这一问题。对于具体介绍静态成员函数和静态成员变量在这里 C++_类和对象(下篇)-CSDN博客

        首先,我们需要在类中定义两个静态成员变量,这里利用的是静态成员变量的生命周期,是在整个函数程序结束后才释放销毁。

        然后我们这里通过的是变长数组的原理来实现的,我们需要在类中定义一个构造函数,然后两个静态成员变量中,一个是用于统计求加和的,一个是用来统计++的,所以这这里我们需要对用于加和的那个静态成员变量初始化为0,用于统计++的那个成静态成员变量初始化为1。

class SUM
{
public:
    SUM()
    {
        _ret+=_i;
        ++_i;
    }
    static int Get_ret()
    {
        return _ret;
    }
private:
    static int _i;
    static int _ret;
};

int SUM::_i=1;
int SUM::_ret=0;

          最后,我们通过类初始化一个长度为n的数组,来调用n次构造函数,这样也就相当于实现了循环,也就在满足了题意的情况下解决了这一问题,接着,我们就通过,类中的静态成员函数,来返回这个值。这样我们就解决这一问题啦!

代码实现:


class SUM
{
public:
    SUM()
    {
        _ret+=_i;
        ++_i;
    }
    static int Get_ret()
    {
        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::Get_ret();
    }
};

2.计算日期到天数转换_牛客题霸_牛客网 (nowcoder.com)

思路讲解:

        这题的思路就是先定义一个获取该月份下的天数的函数,然后我这里的思路就是从一月份开始一直加到你所输入的那个月份,然后将输入月份前面月份的天数和输入的天数求和,这样求出来的天数,就是x年x月x日在x年中的第几天。

代码实现:

#include <iostream>
using namespace std;

//因为平年闰年的2月天数不一样所以我们需定义一个获取月份的函数来解决这一问题
int GetMonth_day(int year, int month)   //获取该月份的天数
{
    static int daysArr[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 daysArr[month];
    }
}

int main()
{
    int year,month,day;
    cin>>year>>month>>day;
    int _month=1;
    while(_month!=month)
    {
        day+=GetMonth_day(year,_month);
        ++_month;
    }
    cout<<day<<endl;
    return 0;
}

3.日期差值_牛客题霸_牛客网 (nowcoder.com)

思路讲解:

        这道题有上一道题铺垫,所以说我们可以利用上道题的知识直接求出x年x月x日的天数。然后在比较年份之间的大小,接着就直接求年份之间天数的差值,然后求上面所求x年x月x日的天数之间天数的差值,最后求和即可。

代码实现:

#include <iostream>
using namespace std;

int GetMonth_day(int year, int month)
{
    static int daysArr[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 daysArr[month];
    }
}

int main()
{
    //求出第一次输入的年的天数
    int year1,month1,day1;
    scanf("%04d%02d%02d",&year1,&month1,&day1);
    int _month=1;
    while(_month!=month1)
    {
        day1+=GetMonth_day(year1,_month);
        ++_month;
    }
    
    //求出第二次输入的年的天数
    int year2,month2,day2;
    scanf("%04d%02d%02d",&year2,&month2,&day2);
    _month=1;
    while(_month!=month2)
    {
        day2+=GetMonth_day(year2,_month);
        ++_month;
    }
    
    int day=0;
    if(year1>year2)
    {
        day=day1-day2;      //求两次输入的数据月日之间天数的差值
        while(year1!=year2)
        {
            if ((year2 % 4 == 0 && year2 % 100 != 0) || (year2 % 400 == 0))
            {
                day+=366;
            }
            else 
            {
                day+=365;
            }
            ++year2;
        }
    }
    else
    {
        day=day2-day1;      //求两次输入的数据月日之间天数的差值
        while(year1!=year2)
        {
            if ((year1 % 4 == 0 && year1 % 100 != 0) || (year1 % 400 == 0))
            {
                day+=366;
            }
            else 
            {
                day+=365;
            }
            ++year1;
        }
    }
    //有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天
    //所以我们所得到的结果应为day+1.
    cout<<(day+1)<<endl;

    return 0;
}

4.打印日期_牛客题霸_牛客网 (nowcoder.com)

思路讲解:

        对于这道题,我们敲过了日期类,所以说对于这道题,我们可以先定一个日期类。

        然后内容包括日期类的构造函数和求当前月份下的天数的函数,以及求+=运算符重载,和打印函数即可。

代码实现:

#include <iostream>
using namespace std;

class Date
{
public:
    Date(int year,int month=1,int day=1)
    :_year(year)
    ,_month(month)
    ,_day(day)
    {}
    int GetMonth_day(int year,int month);
    Date& operator+=(int day);
    void Print()const
    {
       printf("%04d-%02d-%02d",_year,_month,_day);
    }
private:
    int _year;
    int _month;
    int _day;
};

int Date::GetMonth_day(int year, int month)
{
    static int daysArr[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 daysArr[month];
    }
}

Date& Date::operator+=(int day)
{
    _day+=day-1;
    while(_day>GetMonth_day(_year, _month))
    {
        _day-=GetMonth_day(_year, _month);
        ++_month;
        if(_month==13)
        {
            _month=1;
            ++_year;
        }
    }
    return *this;
}

int main() 
{
    int year,day;
    cin >> year >> day;
    Date s1(year);
    s1+=day;
    s1.Print();
    return 0;
}

三、结语

        上述内容,即是我个人对通过C++解决这些习题个人见解。若有大佬发现哪里有问题可以私信或评论指教一下。非常感谢各位uu们的点赞,关注,收藏,还望各位多多关照,让我们一起进步吧!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

杰发科技AC7840——CAN通信简介(8)_通过波特率和时钟计算SEG_1/SEG_2/SJW/PRESC

通过公式计算 * 波特率和采样点计算公式&#xff1a;* tSeg1 (S_SEG_1 2); tSeg2 (S_SEG_2 1).* BandRate (SCR_CLK / (S_PRESC 1) / ((S_SEG_1 2) (S_SEG_2 1))), SCR_CLK 为CAN 模块源时钟* SamplePoint (tSeg1 / (tSeg1 tSeg2)). {0x0D, 0x04, 0x04, 0x3B},…

[创业之路-140] :生产 - 生产流程概述

目录 前言&#xff1a; 一、生产流程的基本框架 二、生产流程的关键要素 前言&#xff1a; 生产流程是一个广泛的概念&#xff0c;它涵盖了从原材料投入到成品产出的全过程。 这个过程在不同行业和领域中有所不同&#xff0c;但通常都包括一系列有序的步骤和环节。 以下是…

WIN 10 添加右键菜单(VSCode 打开当前目录)

WIN 10 添加右键菜单&#xff08;VSCode 打开当前目录&#xff09; 前言最终效果操作步骤 前言 每次打开代码都需要先打开 VSCode&#xff0c;再选择最近打开的项目或者浏览打开项目&#xff0c;感觉比较难找。所以自己添加了右键命令。 最终效果 操作步骤 cmd 打开注册表 找…

C语言程序设计(初识C语言后部分)

十七&#xff0c;数组 1.一维数组的创建和初始化 1&#xff09;数组的创建 数组是一组相同类型元素的集合 数组的创建方式&#xff1a; type_t arr_name [const_n]; //type_t 是指数组的元素类型 //const_n 是一个常量表达式&#xff0c;用来指定数组大小 …

R语言统计分析——回归分析的改进措施

参考资料&#xff1a;R语言实战【第2版】 如果在回归诊断中发现了问题&#xff0c;我们该如何做&#xff1f;有四种方法可以处理违背回归假设的问题&#xff1a; ①删除观测点&#xff1b; ②变量变换&#xff1b; ③添加或删除变量&#xff1b; ④使用其他回归方法。 1、…

C语言 ——— 常见的动态内存错误(下篇)

目录 使用free释放一块动态开辟内存的一部分 对同一块动态内存多次释放 动态开辟内存忘记释放&#xff08;内存泄漏&#xff09; 使用free释放一块动态开辟内存的一部分 代码演示&#xff1a; // 动态开辟10个整型空间 int* p (int*)malloc(sizeof(int) * 10);// 判断是…

Pod基础使用

POD基本操作 1.Pod生命周期 在Kubernetes中&#xff0c;Pod的生命周期经历了几个重要的阶段。下面是Pod生命周期的详细介绍&#xff1a; Pending&#xff08;待处理&#xff09;: 调度: Pod被创建后&#xff0c;首先进入“Pending”状态。此时&#xff0c;Kubernetes的调度器…

机器视觉运动控制一体机VPLC532E在汽车胶带缠绕的开放式CNC应用

市场应用背景 在汽车线束和零配件中&#xff0c;胶带缠绕是一种常见且重要的加工工艺&#xff0c;主要用于线束/零配件的捆扎、固定、绝缘保护等应用。在缠绕头控制下&#xff0c;胶带均匀缠绕在汽车线束/零配件表面&#xff0c;完成缠绕后&#xff0c;系统自动执行切割。汽车…

【CSS】使用 CSS 自定义属性(变量)-- var()

自定义属性&#xff08;有时候也被称作CSS 变量或者级联变量&#xff09;是由 CSS 作者定义的&#xff0c;它包含的值可以在整个文档中重复使用。由自定义属性标记设定值&#xff08;比如&#xff1a; --main-color: black;&#xff09;&#xff0c;由 var() 函数来获取值&…

qtsql连接达梦数据库

odbc window和linux都有odbc的中间件&#xff0c;可以通过odbc中间件配合qtsql连接数据库 windows下配置odbc linux配置odbc apt install unixodbc unixodbc-dev /etc/odbcinst.ini配置 [DM8 ODBC DRIVER] DescriptionDM8 ODBC Driver DRIVER/opt/dmdbms/bin/libdodbc.so/et…

安装打印机提示“打印后台程序服务没有启动”的解决方法

1、在桌面选中“我的电脑”&#xff0c;鼠标右键选择“管理”&#xff1b; 2、在“管理”窗口中&#xff0c;选取“服务和应用程序”扩展项目下的“服务”选项&#xff08;如图&#xff09;&#xff0c;在右侧出现系统服务列表中找到“Print Spooler”服务&#xff0c;双击进入…

JavaWeb基础 -- Servlet

JavaWeb基础 – Servlet 1.Servlet简介 1.1 Servlet是什么 Servlet本身是用Java编写的&#xff0c;运行在Web服务器上的应用程序&#xff0c;并作为Web浏览器和其他HTTP客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。Servlet可以收集来自网页表单输入的数据…

ARM 裸机与 Linux 驱动对比及 Linux 内核入门

目录 ARM裸机代码和驱动的区别 Linux系统组成 内核五大功能 设备驱动分类 内核类型 驱动模块 驱动模块示例 Makefile配置 命令 编码辅助工具 内核中的打印函数 printk 函数 修改打印级别 ​编辑 打印级别含义 驱动多文件编译 示例 模块传递参数 命令行传递参数…

【机器学习】经典CNN架构

第一章:引言 1.1 研究背景 机器学习的发展历程 机器学习作为人工智能的重要分支,其发展历程可以追溯到20世纪50年代。初期的机器学习研究主要集中在规则系统和基本的统计学习方法上。随着计算能力的提升和数据的积累,机器学习逐渐发展出更为复杂的算法和模型。20世纪80年…

7.添加购物车以及完善导航条跳转

添加购物车 一、引言二、前端2.1引入轻组件2.2为图片添加点击事件2.3创建addShoppingCart函数 三、后端四、运行效果五、导航条跳转 一、引言 在前几篇文章中&#xff0c;我们一步一步慢慢的实现了项目的建立&#xff0c;从数据库获取数据显示在页面&#xff0c;商品大图查看&…

C++ JAVA源码 HMAC计算 openssl 消息认证码计算 https消息防篡改 通信安全

签名和验签 把所有消息按顺序合并成一条信息&#xff0c;对这个信息用密钥进行签名。 签名信息通过 HTTP 头 Sign 传递&#xff0c;没有携带签名或者签名验证不通过的请求&#xff0c;将会被认为异常请求&#xff0c;并返回相应 code 码。 校验方法&#xff1a;根据 http请求…

国产3A游戏《黑神话悟空》中AI绘画技术的运用与探索

导语&#xff1a;近年来&#xff0c;我国游戏产业不断发展&#xff0c;越来越多的国产游戏开始尝试运用AI技术&#xff0c;以提升游戏品质。其中&#xff0c;国产3A游戏《黑神话悟空》便在原画设计过程中&#xff0c;巧妙地运用了AI绘画技术。本文将带你了解《黑神话悟空》如何…

【计算机三级-数据库技术】操作题大题(第六套)

第六套操作题 第46题 假定要建立一个学校科研项目管理的信息系统&#xff0c;需要管理如下信息&#xff1a; 教师&#xff1a;教师编号、教师姓名&#xff1b; 项目&#xff1a;项目编号、项目名称、资助额&#xff1a; 学生&#xff1a;学生编号、学生姓名、学位&#xff0c…

Vodafone 推出了与 Wi-Fi 竞争的基于树莓派私人5G技术

随着全球5G网络的逐步推出&#xff0c;在其过程中遇到了可预见的起起伏伏&#xff0c;并且蜂窝技术也开始进入另一个无线技术 Wi-Fi &#xff0c;并且已经占据的市场。私有5G网络&#xff08;即个人或公司建立自己的全设施蜂窝网络&#xff09;如今正在寻找曾经属于Wi-Fi的唯一…

AR 眼镜之-系统应用音效-实现方案

目录 &#x1f4c2; 前言 AR 眼镜系统版本 系统应用音效 1. &#x1f531; 技术方案 1.1 技术方案概述 1.2 实现方案 1&#xff09;初始化 2&#xff09;播放音效 3&#xff09;释放资源 2. &#x1f4a0; 播放音效 2.1 静音不播放 2.2 获取音效默认音量 3. ⚛️ …