当前位置: 首页 > 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…...

jupyter notebook中查看python版本的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...

动态字符串 String (完整源码)

C自学精简教程 目录(必读) C数据结构与算法实现&#xff08;目录&#xff09; 本文的实现基本上和 动态数组 vector 是一样的。 因为大部分接口都一样。 所以&#xff0c;本文就直接给出全部的源码和运行结果。 //------下面的代码是用来测试你的代码有没有问题的辅助代码…...

【深度学习】实验05 构造神经网络示例

文章目录 构造神经网络1. 导入相关库2. 定义一个层3. 构造数据集4. 定义基本模型5. 变量初始化6. 开始训练 构造神经网络 注明&#xff1a;该代码用来训练一个神经网络&#xff0c;网络拟合y x^2-0.5noise&#xff0c;该神经网络的结构是输入层为一个神经元&#xff0c;隐藏层…...

用了这么久SpringBoot却还不知道的一个小技巧

前言 你可能调第三方接口喜欢启动application&#xff0c;修改&#xff0c;再启动&#xff0c;再修改&#xff0c;顺便还有个不喜欢写JUnitTest的习惯。 你可能有一天想要在SpringBoot启动后&#xff0c;立马想要干一些事情&#xff0c;现在没有可能是你还没遇到。 那么SpringB…...

Websocket、SessionCookie、前端基础知识

目录 1.Websocket Websocket与HTTP的介绍 不同使用场景 Websocket链接过程 2.Session&Cookie Cookie的工作原理 Session的工作原理 区别 3.前端基础知识 1.Websocket Websocket与HTTP的介绍 HTTP&#xff1a; 1.HTTP是单向的&#xff0c;客户端发送请求&#xff0…...

【云原生进阶之PaaS中间件】第一章Redis-2.4缓存更新机制

1 缓存和数据库的数据一致性分析 1.1 Redis 中如何保证缓存和数据库双写时的数据一致性&#xff1f; 无论先操作db还是cache&#xff0c;都会有各自的问题&#xff0c;根本原因是cache和db的更新不是一个原子操作&#xff0c;因此总会有不一致的问题。想要彻底解决这种问题必须…...

Qt——事件处理详解

Qt事件处理 一、事件基础 事件是Qt应用程序中的基本构建块&#xff0c;它们代表了一些特定的行为或状态变化。事件可以是鼠标点击、键盘输入、窗口大小改变、定时器事件等。每个事件都是一个对象&#xff0c;继承自QEvent类。 二、事件常见类型 Qt中的事件分为多种类型&…...

基于位置管理的企业员工考勤打卡系统设计 微信小程序

员工考勤打卡系统设计app是针对员工必不可少的一个部分。在公司发展的整个过程中&#xff0c;员工考勤打卡系统设计app担负着最重要的角色。为满足如今日益复杂的管理需求&#xff0c;各类员工考勤打卡系统设计app程序也在不断改进。本课题所设计的 MVC基于HBuilder X的员工考勤…...

adb 查找应用包名,应用 Activity 等信息

列出设备上的包 不使用参数&#xff1a;adb shell pm list packages&#xff0c;打印设备/模拟器上的所有软件包 根据包名查看应用的activity 命令&#xff1a; dumpsys package 包名 adb shell dumpsys package 包名 petrel-cv96d:/data/app # dumpsys package com.instal…...

八、SpringBoot集成Kafka

目录 一、添加依赖二、SpringBoot 生产者三、SpringBoot 消费者 一、添加依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><depend…...