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

C++练习备忘录

1. 保留两位小数输出格式

在这里插入图片描述

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{double S = 0;S = (15 + 25) * 20 / 2;cout << fixed << setprecision(2) << S;return 0;
}

2. 设置输出宽度

在这里插入图片描述

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{int a, b, c;cin >> a >> b >> c;cout << setw(8) << a << " ";cout << setw(8) << b << " ";cout << setw(8) << c;return 0;
}

3. ASCII码转换

在这里插入图片描述

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{char a;cin >> a;cout << int(a);return 0;
}

4. 高精度加法

在这里插入图片描述

#include <iostream>
using namespace std;// 字符型转整型
void strtoint(string src, int des[]) {for (int i = 0;i < src.size();i++) {//从[1]开始倒序存整型数字,使得个位对齐des[src.size() - i] = src[i] - '0'; }
}int main()
{	string s1, s2;int a[201] = {0};int b[201] = {0};int ans[201] = {0};cin >> s1 >> s2;/* 字符型转整型,通过反转使得个位对齐s1: 1234s2: 567序列号:01234a:  4321b:  765*/strtoint(s1, a);strtoint(s2, b);// 计算ans数组长度,按最长位+1int a_size = s1.size(), b_size = s2.size();int ans_size = max(a_size, b_size) + 1;// 对位相加得到ans数组for (int i = 1;i <= ans_size;i++) {ans[i] = a[i] + b[i] + ans[i]; // a+b+进位ans[i + 1] = ans[i] / 10; // 进位ans[i] %= 10; // 留个位数}// 去除前导0while (ans[ans_size] == 0 && ans_size > 1)ans_size--;// 倒序打印得最后结果for (int i = ans_size;i >= 1;i--)cout << ans[i];return 0;
}

5. 高精度减法

在这里插入图片描述
这里多加了一下a和b大小的判别

#include <iostream>
using namespace std;// 字符型转整型
void strtoint(string src, int des[]) {for (int i = 0;i < src.size();i++) {//从[1]开始倒序存整型数字,使得个位对齐des[src.size() - i] = src[i] - '0';}
}// 比较字符串输入数的大小
bool cmpstring(string str1, string str2) {if (str1.size() != str2.size())return str1.size() > str2.size();elsereturn str1 >= str2;
}int main()
{string s1, s2;int a[201] = { 0 };int b[201] = { 0 };int ans[201] = { 0 };cin >> s1 >> s2;// 保证大数减小数if (cmpstring(s1, s2) == false) {swap(s1, s2);cout << "-";}/* 字符型转整型,通过反转使得个位对齐s1: 1234s2: 567序列号:01234a:  4321b:  765*/strtoint(s1, a);strtoint(s2, b);// 计算ans数组长度int a_size = s1.size(), b_size = s2.size();int ans_size = max(a_size, b_size);// 对位相减得到ans数组for (int i = 1;i <= ans_size;i++) {// 判断够不够减if (a[i] < b[i]) {a[i + 1]--;a[i] += 10;}ans[i] = a[i] - b[i];}// 去除前导0while (ans[ans_size] == 0 && ans_size > 1)ans_size--;// 倒序打印得最后结果for (int i = ans_size;i >= 1;i--)cout << ans[i];return 0;
}

6. 高精度乘法

在这里插入图片描述

#include <iostream>
using namespace std;// 字符型转整型
void strtoint(string src, int des[]) {for (int i = 0;i < src.size();i++) {//从[1]开始倒序存整型数字,使得个位对齐des[src.size() - i] = src[i] - '0';}
}int main()
{string s1, s2;int a[101] = { 0 };int b[101] = { 0 };int ans[201] = { 0 };cin >> s1 >> s2;strtoint(s1, a);strtoint(s2, b);// 计算ans数组长度int a_size = s1.size(), b_size = s2.size();int ans_size = a_size + b_size;/*序列号:5	 4	  3	   2	  1a4b1 a3b1 a2b1  a1b1a4b2	a3b2 a2b2 a1b2得:ans[i + j - 1] += a[i] * b[j]*/for (int i = 1;i <= a_size;i++) {for (int j = 1;j <= b_size;j++) {ans[i + j - 1] += a[i] * b[j];ans[i + j] += ans[i + j - 1] / 10;ans[i + j - 1] %= 10;}}// 去除前导0while (ans[ans_size] == 0 && ans_size > 1)ans_size--;// 倒序打印得最后结果for (int i = ans_size;i >= 1;i--)cout << ans[i];return 0;
}

7. 冒泡排序

  • 时间复杂度:O( n 2 n^2 n2)
  • 空间复杂度:O( 1 1 1)
  • 稳定性:稳定

在这里插入图片描述
代码:

void bubbleSort(vector<int>& nums) {int n = nums.size();for (int i = 0; i < n-1; i++) {bool swapped = false;for (int j = 0; j < n-i-1; j++) {if (nums[j] > nums[j+1]) {swap(nums[j], nums[j+1]);swapped = true;}}// 如果一轮遍历没有发生交换,说明序列已经有序,提前结束排序if (!swapped) break;}}

例题:
在这里插入图片描述

#include <iostream>
#include <vector>
using namespace std;int BubbleSort(vector<int>& a,int n) {int swapped_num = 0;for (int i = 0;i < n - 1;i++) {// 判断是否提前结束bool swapped = false;for (int j = 0;j < n - 1 - i;j++) {if (a[j] > a[j + 1]) {swap(a[j], a[j + 1]);swapped_num++;swapped = true;}}// 如果内层循环没有再交换说明剩下的已经是有序的了,可提前结束if (swapped == false)break;}return swapped_num;
}int main()
{int n;int swapped_num;cin >> n;// 长度为变量,使用动态数组vector<int> a(n);for (int i = 0;i < n;i++)cin >> a[i];swapped_num = BubbleSort(a, n);cout << swapped_num;return 0;
}

8. 选择排序

在这里插入图片描述

  • 时间复杂度:O( n 2 n^2 n2)
  • 空间复杂度:O( 1 1 1)
  • 稳定性:不稳定(对于[20,20,5]这种情况,第一个20会和5交换,从而到第二个20的后面。改变了相等值的前后顺序,故不稳定)

代码:

void SelectSort(vector<int>& a) {int n = a.size();for (int i = 0;i < n;i++) {int minIndex = i;for (int j = i + 1;j < n;j++) {if (a[j] < a[minIndex])minIndex = j;}swap(a[i], a[minIndex]);}
}

9. 插入排序

在这里插入图片描述

  • 时间复杂度:O( n 2 n^2 n2)
  • 空间复杂度:O( 1 1 1)
  • 稳定性:稳定

代码:

void InsertSort(vector<int>& a) {for (int j = 1;j < a.size();j++) { //构造无序区for (int i = 0;i < j;i++) { //构造有序区if (a[j] < a[i]) {// 后移插入int tmp = a[j];for (int k = j - 1;k >= i;k--) {a[k + 1] = a[k];}a[i] = tmp;break; // 跳出有序区的循环}}}
}
  1. 希尔排序(减小增量排序)

在这里插入图片描述
在这里插入图片描述

  • 时间复杂度:最坏O( n 2 n^2 n2)、最好O( n n n)、平均O( n 1.5 n^{1.5} n1.5)
  • 空间复杂度:O( 1 1 1)
  • 稳定性:不稳定(例如:[20,20,10,30]排序后第一个20与10交换位置,故不稳定)

代码:

void ShellInsert(vector<int>& a, int start, int gap) {for (int j = start+gap;j < a.size();j+=gap) { //构造无序区for (int i = start;i < j;i+=gap) { //构造有序区if (a[j] < a[i]) {// 后移插入int tmp = a[j];for (int k = j - gap;k >= i;k-=gap) {a[k + gap] = a[k];}a[i] = tmp;break; // 跳出有序区的循环}}}
}void ShellSort(vector<int>& a) {for (int gap = a.size() / 2;gap >= 1;gap /= 2) {for (int i = 0;i < gap;i++) {ShellInsert(a, i, gap);}}
}
  1. 计数排序

计数排序(Counting Sort)算法。这是一种非基于比较的排序算法,特别适用于对整数进行排序,尤其是当输入数据范围不是很大时,其性能表现非常出色。(简化版的桶排序)

在这里插入图片描述

  • 时间复杂度:最坏O( n + k n+k n+k)(其中 n 是待排序数组的元素数量,k 是输入数据中最大元素的值)
  • 空间复杂度:O( k k k)
  • 稳定性:稳定
void CountSort(vector<int>& a) {// 1.找最大值int max = a[0];for (int i = 0;i < a.size();i++) {if (a[i] > max)max = a[i];}// 2.根据最大值开辟新数组vector<int> countArr(max + 1, 0);// 3.将原数据放入新数组中并计数for (int i = 0;i < a.size();i++) {countArr[a[i]]++;}// 4.按照下标依次取出计数数组中的下标a.clear();for (int i = 0;i < max + 1;i++) {while (countArr[i]) {a.push_back(i);countArr[i]--;}}
}
  1. 桶排序

桶排序 (Bucket sort)是计数排序的升级版

  • 设置一个定量的数组当作空桶;
  • 遍历输入数据,并且把数据一个一个放到对应的桶里去;
  • 对每个不是空的桶进行排序;
  • 从不是空的桶里把排好序的数据拼接起来。

在这里插入图片描述

  • 时间复杂度:O( n + k n+k n+k)
  • 空间复杂度:O( n + k n+k n+k)
  • 稳定性:取决于桶内的排序是否稳定
void BucketSort(vector<int>& a) {// max_element 返回的是迭代器,因此需要解引用才能得到实际值int max = *max_element(a.begin(), a.end());int min = *min_element(a.begin(), a.end());// 求需要桶的数量(默认a.size为桶的容量)int bucketNum = ((max - min + 1) / a.size())+1;vector<vector <int>> Bucket(bucketNum);// 把元素放入对应的桶里for (int i = 0;i < a.size();i++) {int index = (a[i] - min + 1) / a.size();Bucket[index].push_back(a[i]);}// 对桶内元素进行排序(任意排序都行)for (int i = 0;i < Bucket.size();i++) {sort(Bucket[i].begin(), Bucket[i].end());}// 将各桶中元素按顺序遍历取出a.clear();for (int i = 0;i < Bucket.size();i++) {for (int j = 0;j < Bucket[i].size();j++) {a.push_back(Bucket[i][j]);}}
}

相关文章:

C++练习备忘录

1. 保留两位小数输出格式 #include <iostream> #include <iomanip> using namespace std; int main() {double S 0;S (15 25) * 20 / 2;cout << fixed << setprecision(2) << S;return 0; }2. 设置输出宽度 #include <iostream> #inclu…...

改善工作流

快捷键管理器 打开Editor->Shortcuts查看和编辑Unity中的快捷键 示例 ShiftSpace 窗口最大化 P 选择预制体 进入预制体编辑模式 单一检视窗口 选择组件&#xff0c;选择Properties打开一个窗口&#xff0c;显示组件信息&#xff1b;切换对象&#xff0c;窗口信息不会改变…...

迭代器失效

一、什么是迭代器失效 迭代器的主要作用就是让算法能够不用关心底层数据结构&#xff0c;其底层实际就是一个指针&#xff0c;或者是对指针进行了封装&#xff0c;比如&#xff1a;vector的迭代器就是原生态指针T* 。因此迭代器失效&#xff0c;实际就是迭代器底层对应指针所指…...

@RequestParam @RequestBody @PathVariable 这三个注解对应的前端使用vue的http请求时不同的调用方式

1. RequestParam 用途&#xff1a;用于提取请求参数&#xff0c;常见于GET请求或表单提交。 Vue HTTP 请求示例&#xff1a; // 使用axios发送GET请求 axios.get(/api/users, { params: { id: 1, name: John } }); 2. RequestBody 用途&#xff1a;用于提取请求体…...

SQL - 索引

索引本质上是数据库引擎用来快速查找数据的数据结构&#xff0c;可以显著提高查询的性能&#xff0c;为了加快运行较慢的查询。创建索引 默认索引 create index 索引名 on 表名 (列名); 通过对列名进行创建索引&#xff0c;在查询的时候&#xff0c;数据库就能通过索引找到匹配…...

Oracle23ai新特性FOR LOOP循环控制结构增强

在Oracle数据库中&#xff0c;FOR LOOP是一种常用的循环控制结构&#xff0c;它允许你重复执行一系列语句固定次数或直到满足特定条件为止。然而&#xff0c;标准的Oracle PL/SQL中的FOR LOOP主要用于遍历集合&#xff08;如数组或游标的结果集&#xff09;&#xff0c;而不是像…...

DHU OJ 二维数组

思路及代码 #include<iostream> using namespace std; int main(){ //input 多组 //input M,N int 1< <20 //input M 行 N 列 数据 //initialize listint M, N;while (cin >> M >> N){int list[M][N];for (int i 0; i < M-1; i){for (int j 0; j…...

UDP/TCP --- Socket编程

本篇将使用 Linux 中的系统调用来实现模拟 TCP 和 UDP 的通信过程&#xff0c;其中只对 UDP 和 TCP 进行了简单的介绍&#xff0c;本篇主要实现的是代码&#xff0c;至于 UDP 和 TCP 的详细讲解将会在之后的文章中给出。 本篇给出的 tcp 和 udp 的代码中的 echo 都是测试连接是…...

【C语言】最详细的单链表(两遍包会!)

&#x1f984;个人主页:小米里的大麦-CSDN博客 &#x1f38f;所属专栏:C语言数据结构_小米里的大麦的博客-CSDN博客 &#x1f381;代码托管:黄灿灿/数据结构 (gitee.com) ⚙️操作环境:Visual Studio 2022 目录 一、前言 二、单链表的概念 1. 单链表的特点 2. 单链表的基本…...

QT:VS2019 CMake编译CEF

CEF介绍 CEF作为一个基于Chromium的开源Web浏览器控件&#xff0c;为第三方应用提供了强大的嵌入浏览器支持。其多平台支持、HTML5特性、自定义能力以及多进程架构等特性&#xff0c;使得CEF在浏览器开发、桌面应用、开发工具以及自动化测试等领域得到了广泛应用。 多平台支持…...

day31(8/19)——静态文件共享、playbook

目录 一、ansible模块 script模块 copy模块 使用command模块下载 nfs-utils rpcbind 在被控制的主机上添加static目录&#xff0c;并创建test文件 command模块 service模块 二、playbook 三、playbook编排vsftpd 1、安装 2、卸载 3、启动服务 4、修改配置文件设置不…...

白骑士的C#教学实战项目篇 4.4 游戏开发

系列目录 上一篇&#xff1a;白骑士的C#教学实战项目篇 4.3 Web开发 在这一部分&#xff0c;我们将探索如何使用 Unity 和 C# 开发游戏。游戏开发结合了编程、图形设计和创意&#xff0c;既充满挑战又充满乐趣。通过这一节的学习&#xff0c;您将了解游戏引擎的基础知识&#…...

在Vue工程中开发页面时,发现页面垂直方向出现两个滚动条的处理

在Vue工程中开发页面时&#xff0c;发现页面垂直方向出现两个滚动条 最近在开发页面时&#xff0c;发现页面多了两个滚动条&#xff0c;如图&#xff1a; 原因&#xff1a; 当一个页面的内容高度大于屏幕的高度时就会出现滚动条。一般情况下当一个页面高度大于屏幕高度时&a…...

【C++初阶】:C++入门篇(一)

文章目录 前言一、C命名空间1.1 命名空间的定义1.2 命名空间的使用 二、C的输入和输出2.1 cin和cout的使用 三、缺省参数3.1 缺省参数的分类 四、函数重载4.1 函数重载概念及其条件4.2 C支持函数重载原理 -- 名字修饰 前言 C是在C语言的基础之上&#xff0c;增加了一些面向对象…...

【JAVA CORE_API】Day14 Collection、Iterator、增强for、泛型、List、Set

Collection接口及常用方法 Collection<Object> collection new ArrayList();&#xff1a;实例化ArrayList集合对象&#xff1b; collectionName.add(Object obj);&#xff1a;在集合中增加元素&#xff1b; int sizeName collectionName.size();&#xff1a;获取集合…...

Go更换国内源配置环境变量

背景 要在中国境内下载和使用Go编程语言的包&#xff0c;可以使用国内的Go模块代理来加速下载速度。以下是一些常见的国内Go模块代理源以及如何切换到这些源的方法&#xff1a; 常见国内Go模块代理源 七牛云&#xff08;Qiniu&#xff09; https://goproxy.cn 阿里云&#xff0…...

澎湃认证显实力,浪潮信息存储兼容新篇章

浪潮信息在存储技术兼容性领域取得新突破&#xff0c;其集中式存储HF/AS系列与长擎安全操作系统24强强联合&#xff0c;成功完成澎湃技术认证。此次合作不仅验证了双方产品的无缝对接能力&#xff0c;更体现了浪潮信息在推动全产业链共建共享方面的坚定决心。 浪潮信息澎湃技术…...

Leetcode 3255. Find the Power of K-Size Subarrays II

Leetcode 3255. Find the Power of K-Size Subarrays II 1. 解题思路2. 代码实现 题目链接&#xff1a;3255. Find the Power of K-Size Subarrays II 1. 解题思路 这一题是题目3254的进阶版&#xff0c;其实主要就是增加了算法复杂度。 整体上来说的话思路还是一个分段的思…...

Kotlin学习02-变量、常量、整数、浮点数、操作符、元组、包、导入

变量、常量、整数、浮点数、操作符、元组、包、导入 Book.kt package com.wujialiang.packclass Book {var title: String "Hello" }val PI 3.14; val E 2.178;Main.kt //引入包 //import com.wujialiang.pack.Book; import com.wujialiang.pack.*; //重命名导…...

C++的模板简介

文章目录 一、前言二、函数模板&#xff08;Function Template&#xff09;三、类模板&#xff08;Class Template&#xff09;四、变参模板&#xff08;Variadic Template&#xff09;五、模板的递归与元编程六、模板的局限与陷阱七、常用模板的实例八、C20 的概念&#xff08…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...

ArcPy扩展模块的使用(3)

管理工程项目 arcpy.mp模块允许用户管理布局、地图、报表、文件夹连接、视图等工程项目。例如&#xff0c;可以更新、修复或替换图层数据源&#xff0c;修改图层的符号系统&#xff0c;甚至自动在线执行共享要托管在组织中的工程项。 以下代码展示了如何更新图层的数据源&…...

门静脉高压——表现

一、门静脉高压表现 00:01 1. 门静脉构成 00:13 组成结构&#xff1a;由肠系膜上静脉和脾静脉汇合构成&#xff0c;是肝脏血液供应的主要来源。淤血后果&#xff1a;门静脉淤血会同时导致脾静脉和肠系膜上静脉淤血&#xff0c;引发后续系列症状。 2. 脾大和脾功能亢进 00:46 …...

基于stm32F10x 系列微控制器的智能电子琴(附完整项目源码、详细接线及讲解视频)

注&#xff1a;文章末尾网盘链接中自取成品使用演示视频、项目源码、项目文档 所用硬件&#xff1a;STM32F103C8T6、无源蜂鸣器、44矩阵键盘、flash存储模块、OLED显示屏、RGB三色灯、面包板、杜邦线、usb转ttl串口 stm32f103c8t6 面包板 …...

嵌入式面试常问问题

以下内容面向嵌入式/系统方向的初学者与面试备考者,全面梳理了以下几大板块,并在每个板块末尾列出常见的面试问答思路,帮助你既能夯实基础,又能应对面试挑战。 一、TCP/IP 协议 1.1 TCP/IP 五层模型概述 链路层(Link Layer) 包括网卡驱动、以太网、Wi‑Fi、PPP 等。负责…...