C++学习知识

C++知识小菜单:

备赛蓝桥杯过程中的一些小知识积累,持续更新中!


文章目录

  • C++知识小菜单:
    • 1.小数取整:
    • 2.小数点后保留几位:
    • 3.数字占几位字符:
    • 4. 求x 的 y 次幂(次方)
    • 5. 求平方根
    • 6. 万能头文件
    • 7. 各个数字类型的范围
    • 8. 字符串和整型之间的转化
    • 9.向上向下取整
    • 10.冒泡排序
    • 11.判断质数
    • 12.去掉数组中的重复数据
    • 13. 计算绝对值
    • 14.字符的大小写转化
    • 15.C语言中sscanf函数
    • 16.递归求括号种类
    • 17.求阶乘
    • 18.判断是否闰年
    • 19. 求时间差(特殊的输入方法)
    • 20.最小公倍数和最大公约数
    • 21.背包问题(动态规划)
    • 22. 动态规划入门(硬币种类问题)
    • 23.

1.小数取整:

需要包含的头文件:

#include <cmath>

代码示例:

float num1=3.14;
int ceil_num=(ceil)num1;//ceil_num=4
int floor_num=(floor)num1;//floor_num=3

2.小数点后保留几位:

需要包含的头文件:

#include <iomanip>

代码示例:

float num1=3.1415926525;
cout<<setprecision(5)<<fixed<<num1<<endl;//3.14159
cout<<setprecision(2)<<fixed<<num1<<endl;//3.14

3.数字占几位字符:

需要包含的头文件:

#include <iomanip>

代码示例:

cout << right << setw(2) << 1 <<" "<< setw(2) << 2 <<" "<<setw(2) <<3<<" "<<setw(2) <<4<< endl;
cout << left << setw(2) << 12 <<" "<< setw(2) << 13<<" " <<setw(2) <<14<<" "<<setw(2) <<right<<5<< endl;
cout<<left<<setw(2)<<11<<" "<<setw(2)<<16<<" "<<setw(2)<<15<<" "<<right<<setw(2)<<6<<endl;
cout<<right<<setw(2)<<10<<" "<<setw(2)<<9<<" "<<setw(2)<<8<<" "<<setw(2)<<7<<endl;
//rigth是右对齐,left是左对齐,setw()表示该数字占几位
//如果没有using namespace std,需要在前面加std::,如cout<<std::left<< 

输出示例:
在这里插入图片描述

4. 求x 的 y 次幂(次方)

需要包含的头文件:

#include <math.h>

代码示例:

double a=pow(2,5);//a=32

5. 求平方根

需要包含的头文件:

#include <math.h>

代码示例:

#include<math.h>
#include<stdio.h>int main(void)
{printf("%lf",sqrt(4.0));return 0;
}

6. 万能头文件

需要包含的头文件:

#include <bits/stdc++.h>

代码示例:

#include <bits/stdc++.h>int main()
{// write code herereturn 0
}

它是C++中支持的一个几乎万能的头文件,几乎包含所有的可用到的C++库函数。以后写代码就可以直接引用这一个头文件了,不需要在写一大堆vector、string、map、stack……

7. 各个数字类型的范围

整形 int 16位:-32768至+32767
无符号整型 unsigned int 16位:0至65535
短整型 short int 16位:-32768至+32767
无符号短整型 unsigned short int 16位:0至65535
长整型 long 32位:-2147483648至2147483647(-263~263-1)

8. 字符串和整型之间的转化

字符串转整型代码示例:

#include <iostream>
using namespace std;
#include <typeinfo>int main(){string str="12345";cout<<str<<endl;//typeid(a).name()是查看数据类型 int a=str[0]-'0';//-0是为了将字符串转换为普通数字cout<<"a="<<a<<" "<<typeid(a).name()<<endl;intchar b=a+'0';//+0是为了将数字变成字符串 cout<<"b="<<b<<" "<<typeid(b).name()<<endl;//charreturn 0;
}

运行截图:
在这里插入图片描述

整型转字符串型代码示例

//普通回文数 
bool judge1(int n){char buffer[8];sprintf(buffer, "%d", n);for(int i=0;i<4;i++){if(buffer[i]!=buffer[7-i])return false;}return true;}

9.向上向下取整

需要包含的头文件:

#include <math.h>

代码示例:

cout<<floor(1.2)<<endl;//向下取整  1
cout<<ceil(1.2)<<endl;//向上取整  2
cout<<round(1.2) <<endl;//四舍五入到最临近的整数  1

10.冒泡排序

代码示例:

//冒泡排序,从小到大
for(int i=0;i<len;i++){for(int j=i+1;j<len;j++){if(arr[i]>arr[j]){//前一个大于后一个,交换int temp=arr[j];//临时变量arr[j]=arr[i];//前一个覆盖后一个arr[i]=temp;//临时值赋值给前一个}}
}

使用STL容器,从小到大排序
需要包含的头文件:

#include <algorithm>

代码示例:

#include <iostream>
using namespace std;
#include <algorithm>
int main(){int len;cin>>len;int arr[len];for(int i=0;i<len;i++){cin>>arr[i];}sort(arr,arr+len);printf("%d",arr[len-1]-arr[0]);return 0;
}

11.判断质数

判断质数不用从2循环到n/2,循环到n的平方根即可
需要包含的头文件:

#include <math.h>

代码示例:

bool zhi(int n){if(n==2)return 1;for(int i=2;i<=sqrt(n);i++){if(n%i==0)return 0;}return 1;
}

12.去掉数组中的重复数据

(1)先排序才去重,利用vector和set容器,缺点是打乱了数组的顺序
以洛谷的一道题目为例:
在这里插入图片描述
答案代码:

#include <iostream>
using namespace std;
#include <algorithm> 
#include <vector>
#include <set> 
int MAX=6553005;
int main(){int l,m;cin>>l>>m;int arr[200];for(int i=0;i<2*m;i++){cin>>arr[i];}int brr[MAX]={0};int len=0;for(int i=0;i<2*m;i+=2){for(int j=arr[i];j<=arr[i+1];j++){brr[len]=j;len++;}}sort(brr,brr+len);vector<int> v(brr,brr+len);set<int> s(v.begin(),v.end());v.assign(s.begin(),s.end());cout<<l-v.size()+1<<endl;	
}

(2)不打乱数组顺序,去掉重复数据

#include<iostream>
using namespace std;int main() {int n, array[100], flag = 1;cin >> n;for (int i = 0; i<n; i++) {cin >> array[i];for (int k = 0; k<i; k++) {if (array[i] == array[k]) {flag = 0;}}if (flag) {cout << array[i] << " ";}flag = 1;}
}

在这里插入图片描述

13. 计算绝对值

需要包含的头文件:

#include <math.h>

代码示例:

#include <iostream>
using namespace std;
#include <math.h>
int main(){cout<<abs(5-9)<<endl;cout<<abs(9-5)<<endl;return 0;
}

14.字符的大小写转化

第一种方法:
需要包含的头文件:

#include <ctype.h>

代码示例:

#include <iostream>
using namespace std;
#include <ctype.h>
int main(){string s;cin>>s;for(int i=0;i<s.size();i++) s[i]=toupper(s[i]);
//	printf("%s",&s);cout<<s;return 0;
}

运行截图
在这里插入图片描述
说明:
toupper是小写转大写函数,其函数原型:

int toupper(int c)  
{  if ((c >= 'a') && (c <= 'z'))  return c + ('A' - 'a');  return c;  
}

toupper是大写转小写函数,其函数原型:

int tolower(int c)  
{  if ((c >= 'A') && (c <= 'Z'))  return c + ('a' - 'A');  return c;  
}  

它们有一个优点:只会修改英文字母

注意,这两个函数只能一次修改一个字符

第二种方法:

题目示例
在这里插入图片描述

代码示例

#include <bits/stdc++.h>
using namespace std;
int main(){string s;cin>>s;for(int i=0;i<s.size();i++){if(s[i]>='a'&&s[i]<='z'){s[i]-=32;}cout<<s[i];}//	char a = 'a'-32;
//	cout<<a<<endl;return 0;
}

15.C语言中sscanf函数

需要包含的头文件:

#include <cstdio>

函数定义

int sscanf(const char *str, const char * format, ...);

函数说明
sscanf()定义于头文件stdio.hsscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。格式转换形式请参考scanf()。转换后的结果存于对应的参数内。

返回值
成功则返回参数数目,失败则返回-1(也即EOF)。

例如将数字字符串转换成数字:

代码示例:

#include <iostream>
using namespace std;
#include <stdio.h>
int main(){int a;char ch[10]="1234";sscanf(ch,"%d",&a);cout<<a+1;//1235return 0;
}

16.递归求括号种类

题目:

在这里插入图片描述

代码示例:

#include <bits/stdc++.h>
using namespace std;class Solution{
public:vector<string>ans;vector<string> aa(int n){help(n,n,"");return ans;}void help(int l,int r,string a){if(l==0 && r==0){ans.push_back(a);return ;}if(l!=0) help(l-1,r,a+'(');if(l<r) help(l,r-1,a+')');}};int main(){int n;cin>>n;Solution s;vector<string> rs =s.aa(n);for(int i=0;i<rs.size();i++){cout<<rs[i]<<endl;}return 0;
}

17.求阶乘

代码示例:

#include <bits/stdc++.h>
using namespace std;//求全排列 
typedef long long ll; 
ll c(int a,int b){ll res=1;for(int i=a,j=1;j<=b;i--,j++){res = res*i/j;}return res;
} int main(){int a,b;cin>>a>>b;cout<<c(a,b);return 0;
}

18.判断是否闰年

代码示例:

//闰年2月29天,平年2月28天
bool judge(int year){if( (year%4==0&&year%100!=0) || year%400==0 ){return true;}else{return false;}
}

19. 求时间差(特殊的输入方法)

题目
在这里插入图片描述

代码示例:

#include <bits/stdc++.h>
using namespace std;int second = 1000;
int minute = 60*1000;
int hour = 60*60*1000;int main(){int h,m,s;int h1,m1,s1;int h2,m2,s2;scanf("%d:%d:%d",&h,&m,&s);scanf("%d:%d:%d",&h1,&m1,&s1);int t=h*hour+m*minute+s*second;int t1=h1*hour+m1*minute+s1*second;	int rs = t1-t;h2 = rs/hour;rs%=hour;m2 = rs/minute;rs%=minute;s2=rs/second;printf("%02d:%02d:%02d",h2,m2,s2); return 0;
} 

20.最小公倍数和最大公约数

题目示例:

在这里插入图片描述

代码示例:

#include<bits/stdc++.h>
using namespace std;//最大公约数 辗转相除法(欧几里得算法) 
int gcd(int x,int y){return !y?x:gcd(y,x%y);
} //最小公倍数 
int lcm(int x,int y){return x*y/gcd(x,y); 
} int main(){cout<<gcd(2,4)<<endl;cout<<lcm(2,4)<<endl;return 0; 
} 

21.背包问题(动态规划)

代码示例:

#include <bits/stdc++.h>
using namespace std;//背包问题 i表示偷前i件背包,j表示当前背包的容量,返回总价值
int f[5][9]={0}; 
int w[5]={0,2,3,4,5};//背包重量
int v[5]={0,3,4,5,8};//背包的价值 int main(){int i,j;memset(f,0,sizeof(f));for(int i=1;i<5;i++){for(int j=1;j<9;j++){if(w[i]>j)//背包重量大于当前的容量f[i][j]=f[i-1][j];//偷不了else{//背包容量够,可以选择偷或者不偷//			选择不偷   选择偷 f[i][j]=max(f[i-1][j],f[i-1][j-w[i]]+v[i]);} }} for(int i=0;i<5;i++){for(int j=0;j<9;j++){printf("f[%d][%d]=%d\n",i,j,f[i][j]);}} return 0;
}

22. 动态规划入门(硬币种类问题)

需要包含的头文件:

#include <math.h>

代码示例:

#include <bits/stdc++.h>
using namespace std;#define MAX 10000int n;
int coin[MAX];//n种硬币int sum;
int f[MAX];//f[i]表示当金额为i时所需要的最少硬币数目 void dp(int m){f[0]=0;for(int i=1;i<=sum;i++){//金额从0开始 f[i]=MAX;for(int j=0;j<n;j++){//查看每一枚硬币的面值 if( (i-coin[j])>=0 && (f[i-coin[j]]!=MAX) ){//i-coin[j]表示有该方案,(f[i-coin[j]]!=MAX)表示前一种方案有解 f[i]=min(f[i],f[i-coin[j]]+1);//状态转移方程,		} }} 
} int main(){cin>>n;//硬币的种类数 for(int i=0;i<n;i++){cin>>coin[i];}cin>>sum;//输入需要的金额数 dp(sum);cout<<((f[sum]==MAX)?-1:f[sum])<<endl;//凑齐sum金额需要的最少硬币数目 for(int i=0;i<=sum;i++){cout<<"i="<<i<<":";cout<<f[i]<<" "<<endl;} return 0;
}

23.

需要包含的头文件:


代码示例:



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

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

相关文章

STM32完成软件I2C通讯

今天的重点是利用STM32的软件方案和MPU60506轴姿态传感器建立通讯&#xff0c;今天只完成了简单的发送地址和接收应答的部分&#xff0c;特此记录一下过程&#xff0c;以后忘记可以随时翻出来看看。 先介绍最基本的I2C通讯的最基本的6个时序&#xff1a; 一&#xff1a;起始条…

TCP/IP协议—UDP

TCP/IP协议—UDP UDP协议UDP通信特点 UDP头部报文UDP检验 UDP协议 用户数据传输协议 (UDP&#xff0c;User Datagram Protocol) 是一种无连接的协议&#xff0c;提供了简单的数据传输服务&#xff0c;不保证数据的顺序以及完整性。应用层很多通信协议都基于UDP进行传输&#x…

未佩戴厨师帽识别检测 厨房管理系统 自动监测未佩戴厨师帽行为 实时报警

在厨房环境中&#xff0c;佩戴厨师帽对于食品安全和卫生至关重要。厨师帽能够有效地防止头发、皮屑等杂质掉入食物中&#xff0c;减少了食品受到污染的可能性&#xff0c;从而保障了食品安全。特别是在学校、餐厅等场景中&#xff0c;对于未佩戴厨师帽的检测更是必不可少。相关…

深入理解Linux系统中的前后台任务与守护进程

⭐小白苦学IT的博客主页 ⭐初学者必看&#xff1a;Linux操作系统入门 ⭐代码仓库&#xff1a;Linux代码仓库 ❤关注我一起讨论和学习Linux系统 1.前言 在Linux系统中&#xff0c;进程管理是至关重要的一个环节。其中&#xff0c;前后台任务和守护进程是进程管理中不可忽视的两…

Vue结合el-table实现合并单元格(以及高亮单元表头和指定行)

实现效果如下&#xff1a; 思路&#xff1a; 1.首先使用动态表头表格。 2.其次实现动态计算合并单元格。&#xff08;计算规则 传递需要合并的字段&#xff09; 3.然后封装公共的计算单元格方法 export导出供多个页面使用。 4.同时需要封装成公共的组件供多个页面使用。 5…

电动车新国标迎来修订机会,用户的真实需求能被满足吗?

文&#xff5c;新熔财经 作者&#xff5c;宏一 自2019年4月《电动自行车安全技术规范》发布至今&#xff0c;电动车的新国标标准已经实施5年&#xff0c;市场上的争议也此起彼伏地持续了5年。 因为新国标对电动车的各项技术标准提出的明确要求&#xff0c;其中&#xff0c;最…

Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066

很奇怪的问题,在使用nifi的时候碰到的,这里是用NIFI,把数据从postgresql中同步到mysql中, 首先postgresql中的源表,中是没有create_time这个字段的,但是同步的过程中报错了. 报错的内容是说,目标表中有个create_time字段,这个字段是必填的,但是传过来的flowfile文件中,的数据没…

[RK3399 Linux] 使用ubuntu 20.04.5制作rootfs

一、ubuntu base ubuntu base是用于为特定需求创建自定义映像的最小rootfs,是ubuntu可以运行的最小环境。 1.1 下载源码 下载ubuntu-base的方式有很多,可以从官方的地址:ttp://cdimage.ubuntu.com/ubuntu-base/releases。 也可以其它镜像地址下载,如清华源:https://mi…

使用shell管理和配置网络服务_1

1、请使用nmcli命令配置仅主机模式网络环境&#xff0c;要求如下: 1) 创建一个新的网卡连接eth1&#xff0c;该连接映射到ens32网卡上; 首先&#xff0c;确保 ens32 网卡没有被其他网络配置文件使用。然后&#xff0c;使用 nmcli 创建一个新的连接&#xff0c;并将其绑定到 e…

在Linux中使用dpkg -i离线安装下载的deb软件包

“dpkg -i” 是 Debian 系统中用于安装 .deb 格式软件包的命令。它是 Debian Package Management System&#xff08;DPMS&#xff09;的一部分&#xff0c;允许用户通过命令行界面来管理软件包。 使用该命令时&#xff0c;需要提供要安装的软件包的路径作为参数。例如&#…

实战纪实 | 编辑器漏洞之Ueditor-任意文件上传漏洞 (老洞新谈)

UEditor 任意文件上传漏洞 前言 前段时间在做某政府单位的项目的时候发现存在该漏洞&#xff0c;虽然是一个老洞&#xff0c;但这也是容易被忽视&#xff0c;且能快速拿到shell的漏洞&#xff0c;在利用方式上有一些不一样的心得&#xff0c;希望能帮助到一些还不太了解的小伙…

大模型日报|今日必读的9篇大模型论文

大家好&#xff0c;今日必读的大模型论文来啦&#xff01; 1.Google DeepMind 提出 RecurrentGemma&#xff1a;超越 Transformer&#xff0c;迈向高效开放语言模型 Google DeepMind 团队提出了 RecurrentGemma&#xff0c;一个使用 Google 新颖的 Griffin 架构的开放语言模型…

PHP01——php快速入门 之 使用phpstudy快速搭建PHP环境

PHP01——php快速入门 之 使用phpstudy快速搭建PHP环境 0. 前言1. 下载小皮面板1.1 下载phpstudy&#xff08;小皮面板&#xff09;1.2 启动、简单访问1.2.1 启动Apache1.2.2 访问1.2.3 访问自定义文件或页面 2. 创建网站2.1 创建网站2.2 可能遇到的问题2.2.1 hosts权限问题&am…

【新版HI3559AV100开发注意事项(四)】

新版HI3559AV100开发注意事项&#xff08;四&#xff09; 三十、HI3559A参数中对输入分辨率限制的原因是&#xff1f; 答&#xff1a;分辨率限制有两个来源&#xff1a; 一个是时钟频率最高为600M&#xff0c;开启一拍两像素之后相当于1200M。你这个数据量太大了&#xff0c;6…

[大模型]基于 ChatGLM3 和 LangChain 搭建知识库助手

基于 ChatGLM3 和 LangChain 搭建知识库助手 环境配置 在已完成 ChatGLM3 的部署基础上&#xff0c;还需要安装以下依赖包&#xff1a; pip install langchain0.0.292 pip install gradio4.4.0 pip install chromadb0.4.15 pip install sentence-transformers2.2.2 pip inst…

微服务项目实战-黑马头条(一):环境搭建 + APP登录功能【前端静态资源+nginx反向代理+网关+过滤器】

文章目录 一、搭建nacos二、初始工程的搭建2.1 环境准备2.2主体结构 三、APP登录3.1 需求分析3.2 表结构分析3.3 接口定义3.4 功能实现 四、接口工具postman、swagger、knife4j4.1 postman4.2 swagger4.3 knife4j 五、网关5.1 网关搭建5.2 全局过滤器实现jwt校验 六、前端集成6…

目前电视盒子哪个最好?测评工作室盘点超强电视盒子推荐

每年我们会进行数十次电视盒子测评&#xff0c;对各个品牌的产品都有深入的了解&#xff0c;最近我们收到了很多私信不知道目前电视盒子哪个最好&#xff0c;这次我们结合配置总结了五款性能超强的电视盒子推荐给各位&#xff0c;预算足够想买高配电视盒子的朋友们可不要错过啦…

高级Java开发工程师手把手教你用AI人工智能帮你写JAVA代码实际案例二(生成自定义springboot定时器组件)全网唯一

高级Java开发工程师手把手教你用AI人工智能帮你写JAVA代码实际案例二全网唯一 一、需求背景案例说明 笔者有个实际的生产项目&#xff0c;想自己自定义定时器到数据库表里面&#xff0c;不想配置到配置文件里面&#xff0c;很麻烦&#xff01;这次想用AI帮我写代码&#xff0…

蓝桥杯算法题:栈(Stack)

这道题考的是递推动态规划&#xff0c;可能不是很难&#xff0c;不过这是自己第一次靠自己想出状态转移方程&#xff0c;所以纪念一下&#xff1a; 要做这些题目&#xff0c;首先要把题目中会出现什么状态给找出来&#xff0c;然后想想他们的状态可以通过什么操作转移&#xf…

学习数通HCIE选择誉天有什么优势?

誉天数通课程亮点 课程内容详实&#xff0c;千万级实训环境 涵盖数通技术全场景热门技术&#xff0c;涉及传统园区网&#xff0c;虚拟化园区网&#xff0c;广域互联技术&#xff0c;数据中心网络&#xff0c;网络自动化运维 专业机房环境&#xff0c;全真机教学演示&#xf…