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

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...