牛客网习题——通过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们的点赞,关注,收藏,还望各位多多关照,让我们一起进步吧!

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

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

相关文章

springboot整合springmvc

1、创建springboot项目&#xff0c;勾选Spring web 当前springboot选择的是2.6.13版本&#xff0c;jdk1.8尽量选2.几的springboot 2、在pom.xml中导入相应的坐标 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-…

WPF中XAML相对路径表示方法

在WPF XAML中&#xff0c;相对路径是一种非常实用的方式来引用资源文件&#xff0c;如图像、样式表和其他XAML文件。相对路径可以帮助您构建更加灵活和可移植的应用程序&#xff0c;因为它允许资源文件的位置相对于XAML文件的位置进行定位。 相对路径的表示方法 在XAML中&…

[机器学习]--KNN算法(K邻近算法)

KNN (K-Nearest Neihbor,KNN)K近邻是机器学习算法中理论最简单,最好理解的算法,是一个 非常适合入门的算法,拥有如下特性: 思想极度简单,应用数学知识少(近乎为零),对于很多不擅长数学的小伙伴十分友好虽然算法简单,但效果也不错 KNN算法原理 上图是每一个点都是一个肿瘤病例…

对比state和props的区别?

在React中&#xff0c;state和props是两个核心概念&#xff0c;它们都用于管理组件的数据和状态&#xff0c;但在使用和作用上存在明显的区别。以下是它们之间的详细对比&#xff1a; 1. 定义与来源 props&#xff08;属性&#xff09;&#xff1a; 定义&#xff1a;props是组…

Sakana.ai 迈向完全自动化的开放式科学发现

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

OFDM系统调制,子载波间隔越小,有啥影响?

在OFDM&#xff08;正交频分复用&#xff09;系统中&#xff0c;子载波间隔是一个重要的参数&#xff0c;它直接影响系统的性能。当OFDM系统的子载波间隔越小时&#xff0c;会产生以下几个主要影响&#xff1a; 1. 对多普勒频移和相位噪声的敏感性增加 多普勒频移&#xff1a…

从零开始搭建k8s集群详细步骤

声明&#xff1a;本文仅作为个人记录学习k8s过程的笔记。 节点规划&#xff1a; 两台节点为阿里云ECS云服务器&#xff0c;操作系统为centos7.9&#xff0c;master为2v4GB,node为2v2GB,硬盘空间均为40GB。&#xff08;节点基础配置不低于2V2GB&#xff09; 主机名节点ip角色部…

Docker最佳实践进阶(一):Dockerfile介绍使用

大家好&#xff0c;上一个系列我们使用docker安装了一系列的基础服务&#xff0c;但在实际开发过程中这样一个个的安装以及繁杂命令不仅仅浪费时间&#xff0c;更是容易遗忘&#xff0c;下面我们进行Docker的进阶教程&#xff0c;帮助我们更快速的部署和演示项目。 一、什么是…

力扣面试经典算法150题:找出字符串中第一个匹配项的下标

找出字符串中第一个匹配项的下标 今天的题目是力扣面试经典150题中的数组的简单题: 找出字符串中第一个匹配项的下标 题目链接&#xff1a;https://leetcode.cn/problems/find-the-index-of-the-first-occurrence-in-a-string/description/?envTypestudy-plan-v2&envIdto…

docker compose部署rabbitmq集群,并使用haproxy负载均衡

一、创建rabbitmq的data目录 mkdir data mkdir data/rabbit1 mkdir data/rabbit2 mkdir data/rabbit3 二、创建.erlang.cookie文件&#xff08;集群cookie用&#xff09; echo "secretcookie" > .erlang.cookie 三、创建haproxy.cfg配置文件 global log stdout fo…

深度学习基础—正则化

正则化&#xff1a;解决模型过拟合的手段&#xff0c;本质就是减小模型参数取值&#xff0c;从而使模型更简单。常用范数如下&#xff1a; 使用最多的是L2范数正则项&#xff0c;因此加入正则项的损失函数变为&#xff1a; 使用梯度下降法的权重调整公式&#xff1a; 推导后得到…

HTML浏览器缓存(Browser Cache)

介绍&#xff1a; 浏览器缓存是Web缓存中最直接、最常见的一种形式。当浏览器首次请求某个资源时&#xff0c;如果服务器响应中包含了缓存控制指令&#xff08;如Cache-Control、Expires等&#xff09;&#xff0c;浏览器就会将这些资源存储在本地缓存中。后续请求相同资源时&a…

项目实战:Qt+Opencv相机标定工具v1.3.0(支持打开摄像头、视频文件和网络地址,支持标定过程查看、删除和动态评价误差率,支持追加标定等等)

若该文为原创文章&#xff0c;转载请注明出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/141334834 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、Op…

python之一文秒懂re正则表达式

引言 Python 中的正则表达式是一个强大的工具&#xff0c;用于处理字符串&#xff0c;查找、替换、分割等。正则表达式使用特殊语法来表示一系列匹配字符串的字符规则。Python 通过 re 模块提供对正则表达式的支持。 1. 查找 1.re.search(pattern, string[, flags0]) 功能&…

二十二、状态模式

文章目录 1 基本介绍2 案例2.1 Season 接口2.2 Spring 类2.3 Summer 类2.4 Autumn 类2.5 Winter 类2.6 Person 类2.7 Client 类2.8 Client 类的运行结果2.9 总结 3 各角色之间的关系3.1 角色3.1.1 State ( 状态 )3.1.2 ConcreteState ( 具体的状态 )3.1.3 Context ( 上下文 )3.…

Airtest 的使用

Airtest 介绍 Airtest Project 是网易游戏推出的一款自动化测试框架&#xff0c;其项目由以下几个部分构成 Airtest : 一个跨平台的&#xff0c;基于图像识别的 UI 自动化测试框架&#xff0c;适用于游戏和 App &#xff0c; 支持 Windows, Android 和 iOS 平台&#xff0c…

【功能】修改昵称

需求&#xff1a;全中文模式下&#xff0c;最多8个汉字&#xff1b;其它情况最多16个字节 此处引入C#中&#xff0c;中英文在不同文本格式下占用的空间大小 1.ASCII中&#xff0c;一个英文字母&#xff08;不区分大小写&#xff09;&#xff0c;占1个字节&#xff1b;一个汉字…

解决银河麒麟V10登录循环的方法

解决银河麒麟V10登录循环的方法 一&#xff1a;进入命令行二&#xff1a;删除.Xauthority文件三&#xff1a;重启系统 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在使用银河麒麟桌面操作系统V10时&#xff0c;有时可能会遇到一个令人头…

【题解】—— LeetCode一周小结32

&#x1f31f;欢迎来到 我的博客 —— 探索技术的无限可能&#xff01; &#x1f31f;博客的简介&#xff08;文章目录&#xff09; 【题解】—— 每日一道题目栏 上接&#xff1a;【题解】—— LeetCode一周小结31 5.不含连续1的非负整数 题目链接&#xff1a;600. 不含连续…

jenkins升级踩坑记录

1. 直接用java 1.8版本启动最新版jenkins.war&#xff0c;直接失败 2. 下载java 11启动&#xff0c;依然失败&#xff0c;换成java17版本可以启动&#xff0c;但会报错 解决报错1&#xff1a; java.io.IOException: Failed to load: Parameterized Remote Trigger Plugin (Pa…