当前位置: 首页 > news >正文

【c++5道练习题】①

目录

一、有限制的累加

二、计算日期到天数转换

三、仅仅反转字母

四、 字符串的第一个唯一字符

五、字符串最后一个单词的长度


一、有限制的累加

 题述:

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

 题中已给: 

class Solution
{
public:int Sum_Solution(int n){}
};

知识点考察:

类的构造函数+ static修饰

先给代码再说思路:

代码如下:

#include<iostream>
using namespace std;class Sum
{
public:Sum()//构造函数{_sum += _i;++_i;}static void Init(){//静态成员函数可以访问静态成员变量_i = 1;_sum = 0;}static int GetSum()//静态成员函数可访问静态成员变量{return _sum;}
private:static int _i;//静态成员变量类内声明static int _sum;
};
int Sum::_i = 1;//静态成员变量类外定义(定义的同时初始化)
int Sum::_sum = 0;class Solution
{
public:int Sum_Solution(int n){Sum::Init();//每调用一次Sum_Solution函数都要初始化一次,不然会一直累加Sum* p = new Sum[n];//创建的同时,会调用n次构造函数//Sum a[n];//c99下才支持的变长数组return Sum::GetSum();//静态成员函数可通过类名直接访问}
};int main()
{Solution st;//实例化一个对象cout << st.Sum_Solution(5) << endl;//累加cout << st.Sum_Solution(5) << endl;system("pause");return 0;
}

思路:

自定义类型都要调用构造函数初始化,比如Date a[10] -》10个对象就要调用10次构造函数

那么n个对象就会调用n次构造函数,就像一个变相的循环

问题: 

为什么要用GetSum函数?

因为成员变量_i和_sum都是private权限下的,故在类外无法直接访问,所以用GetSum进行返回

为什么要用static修饰?

因为static是属于类的,每个对象都可以修改静态变量,那就可以实现一个累加效果,那用全局变量不可以吗,当然可用,但是c++中不推荐用全局变量,因为c++强调封装的意义,如果是全局变量谁都可以修改了。

成员函数用static修饰是因为

①、static成员函数才可访问成员变量

②、静态成员函数可通过类名加::的方式直接访问

成员变量用static修饰是因为

①、所有对象调用时都会对同一个static变量上运算

要特别注意一个问题:

求一次累加和,都要初始化一次,因为OJ上有多个测试用例,需要多次测试的,你在自己编译器下可能就运行一次就跑出来了,但OJ上还是不通过,对于本题,这可能就因为连续累加,每调用一次Sum_Solution函数都在之前基础上累加,为了避免这个问题,我们再每一次调用Sum_Solution函数时都初始化一次(Init函数)。

二、计算日期到天数转换

题述:

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

输入描述:

输入三行,分别是年、月、日

输出描述:

返回计算后的第几天

输入:

2012

12

31

输出:

366

思路:

①、创建一个日期类,并写一个运算符相减的重载,用这个日期减去本年的1月1号即可,但是对于这道题复杂化

②、从1月累加到本月的前一月,计算天数,时间复杂度:O(1),这个方法简单,本题采用此方法  

代码如下:

#include<iostream>
using namespace std;int main()
{static int monthDays[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };int year, month, day;//这样可不断接收输入,直到按ctrl+z就结束while (cin >> year >> month >> day){int n = 0;//从1月累加到month的前一月的天数for (int i = 1; i < month; i++){n += monthDays[i];}n += day;//如果是闰年,且>2月的前提下if (month > 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0))n += 1;cout << n << endl;}return 0;
}

注意:

一定要加个while,因为OJ上有多个测试用例,不加while的话一个测试用例是能过,但是OJ上会连续输入,那OJ上也要手动按Ctrl+z结束吗?不是,是OJ把测试用例写入文件中了,然后运行时读文件,读完给后台发个信号就完成了。

三、仅仅反转字母

题述:给定一个字符串 s ,返回“反转后的”字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转。

示例1:

输入:“ab-cd”

输出:“dc-ba”

示例2:

输入:“a-bc-dEf-ghIj”

输出:“j-Ih-jfE-dcba”

题中已给:

class Solution{
public:string reverseOnlyLetters(string s) {}
};

思路:

遍历方法用下标访问方便,不采用迭代器遍历字符串。

本质思路类似于快速排序实现的单趟排序的左右指针法

仅仅交换字母,那就定义两个下标begin=0,end=字符串大小-1begin从左向右走,end从右向左走,两者直到找到对应的值为字母才会停下并交换,那整个大前提就是begin<end才会继续,在begin和end找的过程中也要要求begin<end,不然若字符串全不是字母,begin会一直走,然后越界。

class Solution{
public://判断一个字符是不是字母bool Ischar(char ch){if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')){return true;}else{return false;}}//仅仅交换字母string reverseOnlyLetters(string s) {int begin = 0;int end = s.size() - 1;//算出s的大小,求出最后一个数的下标while (begin < end)//大前提是begin < end循环才继续{while (begin < end && Ischar(s[begin]) == false){//在走的过程中begin < end才能继续往下走,直到找到s[begin]是字母为止begin++;}while (begin < end && Ischar(s[end]) == false){//在走的过程中begin < end才能继续往下走,直到找到s[end]是字母为止end--;}swap(s[begin], s[end]);//c++自动提供swap交换函数//交换完后begin还要++,end还要--begin++;end--;}return s;//返回字符串}
};

四、 字符串的第一个唯一字符

题述:

给定一个字符串,找到他的第一个不重复的字符,并返回它的索引。若不存在,则返回-1.

案例:

s = "leetcode"

返回 0

s = "loveleetcode"

返回 2

要求:

时间复杂度:O(N)

空间复杂度:O(1)

注意事项:

您可假定该字符串只包含小写字母

题中已给:

class Solution {
public:int firstUniqChar(string s) {}
};

思路:

利用计数排序的思路,计数排序本质就是哈希,若用暴力求解法时间复杂度:O(N*N)

和计数排序思路一样,不会计数排序就看我写的八大排序的文章

class Solution {
public:int firstUniqChar(string s) {//使用映射的方式统计次数int count[26] = { 0 };//26个小写字母for (auto ch : s){//范围for遍历scount[ch - 'a']++;//'a'-'a'就变为0}for (size_t i = 0; i < s.size(); ++i){if (count[s[i] - 'a'] == 1)return i;//出现一次则返回对应索引}return -1;//没有出现一次的则返回-1}
};

五、字符串最后一个单词的长度

题述:

计算字符串最后一个单词的长度,单词以空格隔开

输入描述:

一行字符串,非空,长度<5000

输出描述:

整数N,最后一个单词的长度

输入:

hello world

输出:

5

思路:

因为每个单词都以空格分隔,求长度简单,但怎么找最后一个单词,找最后一个空格即可,那就可用到rfind(),若找到对应字符返回其下标,若没找到返回-1,它会从后往前找,找到第一次的即可。

一个单词也没有空格怎么办?rfind()没找到会返回-1,而代码中s.size() - 1 - pos,pos=-1,相当于直接求出长度,所以无需格外考虑 

典型的错误代码:

#include<iostream>
using namespace std;int main()
{string s;cin >> s;//输入字符串//从字符串后面往前找第一次出现的' ',并返回其下标给possize_t pos = s.rfind(' ');//利用下标计算最后一个单词的长度cout << s.size() - 1 - pos << endl;return 0;
}

 注意: 

 当输入的有空格、制表符、换行符时cin就不读了和scanf一样,但本题以空格为分隔,故用getline才行,getline只有遇到换行才结束

getline的使用说明如下:

 正确代码:

#include<iostream>
#include<string>
using namespace std;int main()
{string s;//cin >> s;//遇到空格、制表符、换行就结束了getline(cin, s);//遇到换行才结束//从字符串后面往前找第一次出现的' ',并返回其下标给possize_t pos = s.rfind(' ');//利用下标计算最后一个单词的长度cout << s.size() - 1 - pos << endl;return 0;
}

相关文章:

【c++5道练习题】①

目录 一、有限制的累加 二、计算日期到天数转换 三、仅仅反转字母 四、 字符串的第一个唯一字符 五、字符串最后一个单词的长度 一、有限制的累加 题述&#xff1a; 求123...n&#xff0c;要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句…...

最佳实践:TiDB 业务读变慢分析处理

作者&#xff1a;李文杰 网易游戏计费 TiDB 负责人 在使用或运维管理 TiDB 的过程中&#xff0c;大家几乎都遇到过 SQL 变慢的问题&#xff0c;尤其是查询相关的读变慢问题。读变慢的问题大部分情况下都遵循一定的规律&#xff0c;通过经验的积累可以快速的定位和优化&#xff…...

【ES6】Getter和Setter

JavaScript中的getter和setter方法可以用于访问和修改对象的属性。这些方法可以通过使用对象字面量或Object.defineProperty()方法来定义。 以下是使用getter和setter方法的示例&#xff1a; <!DOCTYPE html> <script>const cart {_wheels: 4,get wheels(){retu…...

3DS Max中绘制圆锥箭头

3DS Max中绘制圆锥箭头 绘制结果绘制过程步骤一&#xff1a;绘制立体圆锥方法1方法2 步骤二&#xff1a;圆锥体调参&#xff08;模型尺寸设置&#xff09;1圆锥体参数说明2圆锥体参数调整 步骤三&#xff1a;绘制圆柱体步骤四&#xff1a;圆柱体调参步骤五&#xff1a;圆锥与圆…...

虚拟机Ubuntu20.04 网络连接器图标开机不显示怎么办

执行以下指令&#xff1a; sudo service network-manager stop sudo rm /var/lib/NetworkManager/NetworkManager.state sudo service network-manager start...

你真的知道什么是USB Server吗?一分钟了解

很多公司都在用USB Server&#xff0c;效率大幅提高&#xff0c;但也还有不少人不知道USB Server到底是什么、干嘛用的。 USB Serve是帮助企业远程连接和集中管控USB设备的服务器 它的主要用途就是异地远程连接USB。 如&#xff0c;虚拟化环境的加密狗、前置机连接&#xff0…...

Node.js 中间件是怎样工作的?

express自带路由功能&#xff0c;可以侦听指定路径的请求&#xff0c;除此之外&#xff0c;express最大的优点就是【中间件】概念的灵活运用&#xff0c;使得各个模块得以解耦&#xff0c;像搭积木一样串起来就可以实现复杂的后端逻辑。除此之外&#xff0c;还可以利用别人写好…...

Spring MVC: 请求参数的获取

Spring MVC 前言通过 RequestParam 注解获取请求参数RequestParam用法 通过 ServletAPI 获取请求参数通过实体类对象获取请求参数附 前言 在 Spring MVC 介绍中&#xff0c;谈到前端控制器 DispatcherServlet 接收客户端请求&#xff0c;依据处理器映射 HandlerMapping 配置调…...

别再头疼反弹Shell失败了,这篇文章带你找到问题根源

别再头疼反弹Shell失败了&#xff0c;这篇文章带你找到问题根源 在渗透测试中&#xff0c;反弹shell失败的原因可以有多种。以下是一些常见的原因&#xff1a; **1.防火墙和网络过滤器&#xff1a;**目标系统可能配置了防火墙或网络过滤器&#xff0c;以限制对外部系统的连接…...

第五章 树与二叉树 四、线索树(手算与代码实现)

一、定义 1.线索树是一种二叉树&#xff0c;它在每个节点上增加了两个指针&#xff0c;分别指向其前驱和后继。 2.这些指针称为“线索”&#xff0c;因此线索树也叫做“线索化二叉树”。 3.在线索树中&#xff0c;所有的叶子节点都被线索化&#xff0c;使得遍历树的过程可以…...

服务器前后端学习理解

个人兴趣&#xff0c;突然想起来记录一下 1. 背景 想做一个最简单的网页&#xff0c;点击按钮后&#xff0c;访问服务器的redis数据库&#xff0c;读取一个为hello的值并显示 首先用js写了一个脚本&#xff0c;使用redis包&#xff0c;读取到了数据&#xff0c;并使用consol.l…...

python-数据分析-numpy、pandas、matplotlib的常用方法

一、numpy import numpy as np1.numpy 数组 和 list 的区别 输出方式不同 里面包含的元素类型 2.构造并访问二维数组 使用 索引/切片 访问ndarray元素 切片 左闭右开 np.array(list) 3.快捷构造高维数组 np.arange() np.random.randn() - - - 服从标准正态分布- - - …...

ChatGPT⼊门到精通(5):ChatGPT 和Claude区别

⼀、Claude介绍 Claude是Anthropic开发的⼀款⼈⼯智能助⼿。 官⽅⽹站&#xff1a; ⼆、Claude能做什么 它可以通过⾃然语⾔与您进⾏交互,理解您的问题并作出回复。Claude的主要功能包括: 1、问答功能 Claude可以解答⼴泛的常识问题与知识问题。⽆论是历史上的某个事件,理科…...

ChatGPT 总结数据分析的所有知识点

ChatGPT功能非常多,特别是对某个行业,某个方向,某个技术进行总结那是相当专业的。 如下图。 直接用一个指令便总结出来数据分析当中的所有知识点内容。 AIGC ChatGPT ,BI商业智能, 可视化Tableau, PowerBI, FineReport, 数据库Mysql Oracle, Office, Python ,ETL Ex…...

hadoop-HDFS

1.HDFS简介 2.1 Hadoop分布式文件系统-HDFS架构 2.2 HDFS组成角色及其功能 &#xff08;1&#xff09;Client&#xff1a;客户端 &#xff08;2&#xff09;NameNode (NN)&#xff1a;元数据节点 管理文件系统的Namespace元数据 一个HDFS集群只有一个Active的NN &#xff…...

0202hdfs的shell操作-hadoop-大数据学习

文章目录 1 进程启停管理2 文件系统操作命令2.1 HDFS文件系统基本信息2.2 介绍2.3 创建文件夹2.4 查看指定文件夹下的内容2.5 上传文件到HDFS2.6 查看HDFS文件内容2.7 下载HDFS文件2.8 HDFS数据删除操作 3 HDFS客户端-jetbrians产品插件3.1 Big Data Tools 安装3.2 配置windows…...

生活小记-挂号信

"挂号信"通常指的是在邮寄过程中通过挂号邮寄服务寄送的信件&#xff0c;相对于普通信件有一些特殊的特点和服务。以下是挂号信与其他信件&#xff08;例如普通信件&#xff09;之间的区别&#xff1a; 跟踪和确认&#xff1a; 挂号信&#xff1a;通过挂号邮寄服务寄…...

3D点云处理:基于PCA的计算点云位姿(占位待整理)

文章目录 文章目录&#xff1a;3D视觉个人学习目录微信&#xff1a;dhlddxB站: Non-Stop_...

本地私有仓库、harbor私有仓库部署与管理

本地私有仓库、harbor私有仓库部署与管理 一、本地私有仓库1.本地私有仓库简介2.搭建本地私有仓库3.容器重启策略介绍 二、harbor私有仓库部署与管理1.什么是harbor2.Harbor的特性3.Harbor的构成4.harbor部署及配置5.客户端测试 三、Harbor维护1.创建2.普通用户操作私有仓库3.日…...

尚硅谷SpringMVC (5-8)

五、域对象共享数据 1、使用ServletAPI向request域对象共享数据 首页&#xff1a; Controller public class TestController {RequestMapping("/")public String index(){return "index";} } <!DOCTYPE html> <html lang"en" xmln…...

cobalt数据库设计解析:如何平衡性能与数据完整性

cobalt数据库设计解析&#xff1a;如何平衡性能与数据完整性 【免费下载链接】cobalt best way to save what you love 项目地址: https://gitcode.com/GitHub_Trending/cob/cobalt 引言&#xff1a;数据库设计的永恒矛盾 在软件开发领域&#xff0c;数据库设计始终面临…...

避坑指南:微信支付V3 SDK自动更新证书失败的5种常见原因及修复方法

微信支付V3证书自动更新失败排查手册&#xff1a;从原理到实战修复 微信支付的V3版本SDK以其自动证书更新机制著称&#xff0c;但不少开发者在集成过程中都遭遇过AutoUpdateCertificatesVerifier的失败问题。证书更新失败不仅会导致支付功能中断&#xff0c;还可能引发验签错误…...

MusePublic Art Studio效果展示:复杂提示词(多主体/空间关系/光照条件)解析能力

MusePublic Art Studio效果展示&#xff1a;复杂提示词&#xff08;多主体/空间关系/光照条件&#xff09;解析能力 1. 创作工具新体验 MusePublic Art Studio让AI图像生成变得像使用画笔一样简单。这个工具专门为创作者设计&#xff0c;不需要懂任何代码技术&#xff0c;通过…...

Umi-OCR:重新定义本地化文字识别的工作流范式

Umi-OCR&#xff1a;重新定义本地化文字识别的工作流范式 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片&#xff0c;PDF文档识别&#xff0c;排除水印/页眉页脚&#xff0c;扫描/生成二维码。内置多国语言库。 …...

如何打破微信单设备限制:WeChatPad终极指南

如何打破微信单设备限制&#xff1a;WeChatPad终极指南 【免费下载链接】WeChatPad 强制使用微信平板模式 项目地址: https://gitcode.com/gh_mirrors/we/WeChatPad 你是不是也遇到过这样的尴尬时刻&#xff1f;在电脑上登录微信工作&#xff0c;手机上的微信就被迫下线…...

RVC与FunASR联动:中文语音识别+AI翻唱端到端流水线

RVC与FunASR联动&#xff1a;中文语音识别AI翻唱端到端流水线 1. 引言&#xff1a;当AI翻唱遇见语音识别 想象一下这个场景&#xff1a;你有一段喜欢的歌曲音频&#xff0c;想用自己的声音翻唱它&#xff0c;但苦于记不住歌词&#xff0c;或者原唱语速太快跟不上。传统的做法…...

短视频创作新利器:Sonic数字人工作流生成口型自然的表情包视频

短视频创作新利器&#xff1a;Sonic数字人工作流生成口型自然的表情包视频 1. 数字人视频创作新趋势 在短视频内容爆炸式增长的今天&#xff0c;创作者们面临着一个共同挑战&#xff1a;如何高效产出高质量视频内容。传统视频制作需要专业设备、复杂后期和大量时间投入&#…...

ncmdumpGUI:网易云音乐加密文件转换的完整解决方案

ncmdumpGUI&#xff1a;网易云音乐加密文件转换的完整解决方案 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 一、初识ncmdumpGUI&#xff1a;解密音乐文件的…...

MogFace人脸检测模型-large应用指南:从图片上传到结果分析,手把手教学

MogFace人脸检测模型-large应用指南&#xff1a;从图片上传到结果分析&#xff0c;手把手教学 1. 认识MogFace-large&#xff1a;为什么选择这个人脸检测模型 在开始实际操作之前&#xff0c;我们先简单了解下MogFace-large的核心优势。这个模型已经在Wider Face六项榜单上霸榜…...

S2-Pro自动化运维脚本生成:应对Linux服务器常见管理任务

S2-Pro自动化运维脚本生成&#xff1a;应对Linux服务器常见管理任务 1. 运维工程师的新助手 最近遇到个挺有意思的事。我们团队新来的运维小哥&#xff0c;处理服务器问题时总要先翻半天文档&#xff0c;再到处搜脚本模板。看着他手忙脚乱的样子&#xff0c;我突然想起自己刚…...