【PAT乙级】一百一十道真题刷后大汇总——C/C++

news2025/1/17 2:52:25

技巧总结

  • 避免精度丢失
  • 查询数据是否存在
  • 容器之间的比较是否相等
  • 缓存区中字符残留问题
  • 巧妙输入
  • 巧妙使用hash数组
  • 简单数学
    • 质数
    • 俩数最大公约与最小公倍
    • 数因子
  • 常用的头文件及其内部函数
    • < map >
    • < set >
    • < pair >
    • < string >
    • < vector >
    • < algorithm >
    • < cctype >
    • < iomanip >

避免精度丢失

所有的计算最后都是转换成二进制进行计算的,所以浮点计算时候,有时会出现精度流失的问题。
解决方法:
尽量转换成long型计算,最后再换成浮点型输出结果。

刷题时候测试点也不一定会考察这方面,但当很多个浮点型数据运算时候丢失精度就更明显了。当题目中告诉我们每个数的小数点最高几位的时候,我们还是最好先转换成long型最后再换回来,这样更为准确。

查询数据是否存在

如果可以在set和map中进行查询find,就别在vector容器中查询用find,因为vector中的find的algorithm的find,时间复杂度是O(n),而set和map是自带的函数,内部结构是红黑树。
但是如果是set和map的话,用count就可以了,因为他们内部都不是重复的。时间复杂度和find一样是(logn);
用map.count(key)是否大于0查找数据应该是用的比较多的。

容器之间的比较是否相等

有时需要把答案放在容器内,然后把所写的放另一个容器里,比较是否与答案相等,这个时候就有必要用到容器之间是否相等。
容器之间比较内部所有元素是否相等,可以直接用**==**
如果两个容器的长度相同且对应位置元素都相等,则两个容器就相等,否则不等。
在这里插入图片描述
Java中重写equals后用equals方法有点像。

缓存区中字符残留问题

使用cin输入数据后,会残留空格或者回车符在缓存区中;
使用getline输入数据后,不会有回车在缓存区中。

#include<iostream>
#include<string>
using namespace std;

int main(){
char ch;
string s,s1;
cin >> s;
getline(cin,s1);

cout << s << endl;
cout << s1 << endl;
}
输入:
a b
输出:
a
 b
输入:
 ab

输出:
ab

出现需要处理字符的原因:
是因为cin遇到空格或者回车字符时,是作为结束符的,但是其本身还是存留在缓冲中,遇到要么作为结束符要么就是直接跳过。既然在缓冲中,如果不需要就需要将其除去;

解决方法:

  1. 使用scanf读取掉那个字符;
  2. 使用getchar()读取掉那个字符;
  3. 有必要的话用getline读取掉也许。
    例子:
    在这里插入图片描述
    输入后要输入字符串,可以先去清楚缓冲区

巧妙输入

cin肯定是比scanf方便的,但有很多时候还是用scanf比较的好。
比如要输入年:月:日cin肯定是不好实现的,用scanf("%d:%d:%d",&year,&month,&day);肯定会方便简洁。
并且学会输入数据的同时,处理数据,这样可以达到简洁代码,防止代码重复。
下面就是个好例子:
在这里插入图片描述

巧妙使用hash数组

使用数组达到hash的目的是比使用map要方便很多的,我们可以利用它的索引以及对应的值表示不同的含义。
比如:
索引表示学号,值表示排名;
索引表示学号,值表示是否存在;
索引表示时间,值表示数据量;
索引表示某字符的ASCII码,值表示是否存在等等。
通过hash数组,可以让我们查询结果更快,效率更高!

简单数学

质数

bool is_prim(int n){
	if(n<2) return false;
	for(int i=2;i*i<=n;++i){
	if(n%i==0) return false;
}
	return true;
}

俩数最大公约与最小公倍

假设有俩数a和b,最大公约数gcd和最小公倍数lcm的乘积应该为a*b
最大公约数:

//a大于b
int gcd(int a,int b){
	return a%b==0?b:gcd(b,a%b);
}

数因子

void ff(int n,vector<int> &res){
	for(int i=1;i<=n;++i){
	if(n%i==0)
		res.push_back(i);
}
}

常用的头文件及其内部函数

只说用的部分函数,咋用这里木得

< map >

map_name.count(key);//这个可以用来判断某个数是否存在
map_name.find(key)!=map.end();//和上面一样
map_name[key] = value;//插入某对键值对
map_name.erase(key);//删除为key的键值对

< set >

set_name.count(x);//这个可以用来判断x是否存在
set_name.find(x)!=map.end();//和上面一样
set_name.insert(x);//向set容器内插入数据x

< pair >

这没啥,就相当于下面的结构体:

struct node{
	数据类型 first;
	数据类型 second;
}

< string >

string_name.substr(startIndex,length)//从startIndex下标开始截取length长度的字符串
string_name.erase(pos)//删除pos下表的字符
string_name.insert(pos,n,ch)//在pos处插入n个ch字符
❤️int res = stoi(string_name);//字符串转换成十进制
❤️string res = to_string(int val);//转换成字符串里面可以是各种基本数据类型的变量
string_name.c_str();//string与const char*指针之间了转换

< vector >

这个动态数组就不说了,没啥需要特指的,还有stack和queue容器,这里不列举。

< algorithm >

stl中的这个好用的函数太多了

max(x,y)
min(x,y)
swap(x,y)
abs(x)//x是整型的
reverse(it1,it2)//这里的it1和it2是指迭代器
fill()//填充
sort()

< cctype >

isalpha()
isdigit()
islower()
isupper()

还有什么toupper、tolower这样的,想转换我们直接ch ^= 32;用异或解决即可。

< iomanip >

setw()//域宽
setfill()//域填充
setbase()//进制

<stdio.h>

这里有俩好用的函数,用于字符串匹配:

int sscanf(const char *str, const char *format, …)
int sprintf(char *str, const char *format, …)

sscanf是将str字符串转换成对应的数据的,是从左到右按字符串匹配得到转换的操作;
sprintf是将数据转换成字符串,是从右到左匹配的一个转换操作;
如果使用这个想用到string,那么可以使用string中的c_str()函数,也可以对其进行操作了。

#include<iostream>
#include<string>
#include<stdio.h>
using namespace std;

int main(){
char ch;
string s,s1;
getline(cin,s);
double f = 0.0;
char x[10];
sscanf(s.c_str(),"%lf",&f);
cout << f << endl;
sprintf(x,"%.2lf",f);
cout << x << endl;
return 0;
}
输入:
66
输出:
66
66.00

输入:
89.356
输出:
89.356
89.36

输入:
3.23
输出:
3.23
3.23

注意:里面的首个参数是char*指针,用string时可以通过c_str()函数使用sscanf,而用sprintf要用char类型数组。
sscanfsprintf成功的话会有返回值的,整型的,如果成功会返回1;
例子:
在这里插入图片描述

常见的一些问题

在这里插入图片描述
上面说的俩函数是不能用的,to_string可以转换成string类型的,然后再调用c_str()也是可以达到那个itoa的效果的,所以不能用也没关系。

  1. 浮点错误:运行时发生浮点错误,比如遇到了除以 0 的情况;
  2. 段错误:一般发生在数组越界了;
  3. 输出超时,运行超时:先去看看存不存在死循环;
  4. 格式错误:检查自己输出是否符合要求,比如空格什么的。

最后总结

  1. 写题还是要仔细,比如看清要输入的字符串是否包含空格,没说包含一般就是有空格的,此时使用cin有些测试点就会出问题了;
  2. 看清题目给的范围或者说是几位,有的时候给的学号就会说几位,巧妙利用所给的条件;
  3. 认真看输出条件防止格式错误,比如末尾不留空格(经常),末尾不留回车符(有,但比较少)等等;
  4. 还是说认真读题的问题,什么怎么输入啊,什么条件下该干什么呀这样的;
  5. 每个题设计出来肯定都会有其解决算法的(当然每题可用的算法可能会有多种,尽量想最方便自己的),先想再动笔,这样一不容易出错,二会提高速度;
  6. 也别轻易的去提交,先过样例再去提交,别求速度求稳;
  7. 最后希望过几天的考试可以多考几分吧,希望这110题没有白刷,加油。

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

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

相关文章

算法排序基础(全版)

一、简单排序 这大概是我整理的最全的有关算法排序的内容啦&#xff01;欢迎大家前来学习&#xff0c;同时也希望多多支持一下博主哦&#xff01; ​ 在我们的程序中&#xff0c;排序是非常常见的一种需求&#xff0c;提供一些数据元素&#xff0c;把这些数据元素按照一定的规则…

【C++ STL容器】:vector存放数据以及存放自定义的数据类型

前言 时不可以苟遇&#xff0c;道不可以虚行。 STL 中最常用的容器为&#xff1a;vector&#xff0c;暂且把它理解为我们之前学过的数组Array。 一、创建一个vector容器&#xff08;数组&#xff09; 添加头文件&#xff1a;#include <vector> vector<int> v;二、…

VauditDemo靶场代码审计

靶场搭建 将下载好的VAuditDemo_Debug目录复制到phpstudy的www目录下&#xff0c;然后将其文件名字修改成VAuditDemo&#xff0c;当然你也可以修改成其他的 运行phpstudy并且访问install目录下的install.php&#xff0c;这里我访问的是http://127.0.0.1/VAuditDemo/install/in…

Linux 性能分析工具- Atop安装和使用

Atop下载&#xff1a;Atoptool.nl 安装时&#xff0c;可能会出现报错&#xff1a;error: Failed dependencies 提示很需要安装python3&#xff0c;所以yum -y install python3&#xff0c;然后再装atop就没问题了。 atop 常用命令 您可在打开日志文件后&#xff0c;使用以下命…

R语言使用马尔可夫链对营销中的渠道归因建模

介绍 在这篇文章中&#xff0c;我们看看什么是渠道归因&#xff0c;以及它如何与马尔可夫链的概念联系起来。最近我们被客户要求撰写关于马尔可夫链的研究报告&#xff0c;包括一些图形和统计输出。我们还将通过一个电子商务公司的案例研究来理解这个概念如何在理论上和实践上…

QT开发教程:QScroller实现home界面滑动效果

在上章我们学习了QScroller实现home界面滑动效果,但是该界面是实现的上下滑动效果,如果想模拟手机home滑动界面,则需要实现左右滑动效果. 本章,则重写QStackedWidget类,来真正的模拟手机,来实现home界面左右滑动效果. 1.SmoothStackedWidget类实现 demo界面如下图所示(创建了…

[附源码]计算机毕业设计springboot第三方游戏零售平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Discourse 在 2022-11 的最新版本中提供了新的边栏

官方有关这个边栏的说明和解释文章请参考链接&#xff1a; Try out the new sidebar and notification menus! - announcements - Discourse Meta 中的内容。 在这个新设计的边栏中包含了一些所有人都需要使用的快捷链接&#xff0c;同时还包括一些定义的快捷分类链接和 Tag 链…

haproxy keepalive实践

1 安装haproxy wget http://download.openpkg.org/components/cache/haproxy/haproxy-2.6.6.tar.gz tar -zxvf haproxy-2.6.6.tar.gz cd haproxy-2.6.6 mkdir -p /app/haproxy # 安装依赖,解决haproxy.c:80:31的问题 sudo yum -y install gcc openssl-devel pcre-devel system…

【Python】一、Python程序运行方式

文章目录实验目的一、熟悉Python的安装二、熟悉PyCharm安装三、启动IDLE&#xff0c;进入Python Shell&#xff0c;熟悉环境&#xff0c;运行教材案例&#xff1a;输出“hello world&#xff01;”四、打开“命令提示符”窗口&#xff0c;使用pip安装管理pygame、numpy等第三方…

算法训练Day30 回溯算法专题 | LeetCode332. 重新安排行程;51.N皇后(棋盘问题);37.解数独(二维的递归)

前言&#xff1a; 算法训练系列是做《代码随想录》一刷&#xff0c;个人的学习笔记和详细的解题思路&#xff0c;总共会有60篇博客来记录&#xff0c;计划用60天的时间刷完。 内容包括了面试常见的10类题目&#xff0c;分别是&#xff1a;数组&#xff0c;链表&#xff0c;哈…

android 自定义view: 跑马灯-光圈

本系列自定义View全部采用kt **系统: **mac android studio: 4.1.3 **kotlin version:**1.5.0 gradle: gradle-6.5-bin.zip 本篇效果: 前沿 最近在bilibili看到一个跑马灯光圈效果挺好, 参考着思路写了一下. bilibili地址,美中不足的是这是html代码 QaQ 实现思路 将效果…

Spark系列之Spark启动与基础使用

title: Spark系列 第三章 Spark启动与基础使用 3.1 Spark Shell 3.1.1 Spark Shell启动 安装目录的bin目录下面&#xff0c;启动命令&#xff1a; spark-shell$SPARK_HOME/bin/spark-shell \ --master spark://hadoop10:7077 \ --executor-memory 512M \ --total-executor-…

长短期记忆网络(LSTM)重点!(自己汇集了很多资料在这篇博客)

文章目录参考资料推荐基础知识评论区精髓代码实现底层实现简洁实现参考资料推荐 心心念念 学了这么久 &#xff0c;终于学到第57集了。 参考一篇掘金的图文LSTM 李宏毅老师的手撕视频配套课件 27:39 开始手撕 看完了李沐老师的LSTM又去找了李宏毅老师的课程然后发现又多了个导…

西门子机床联网

一、设备信息确认 1、确认型号 数控面板拍照确认&#xff1a; 此系统为&#xff1a;西门子828D 还有一种情况是面板无任何版本信息&#xff0c;这时就需要进入系统里面再确认。 2、确认通讯接口 1、数控面板的后面 X130为网络标号 2、其他位置 其他位置一般是前面位置用…

H3C mstp+vrrp实验 新华三杯拆解

H3C mstpvrrp实验一、实验拓扑二、实验要求局域网规划&#xff1a;可靠性&#xff1a;三、实验配置&#xff08;一&#xff09;链路聚合1.创建链路聚合组2.检查&#xff08;二&#xff09;VLAN1.创建vlan2.放行vlan3.检查&#xff08;三&#xff09;MSTP1.配置MSTP域2.配置主备…

通俗易懂的java设计模式(1)-单例模式

什么是单例模式&#xff1f; 单例模式是java中最简单的一种设计模式 需要注意的问题&#xff1a; 1.单例类有且只能有一个实例 2.单例类必须自己创建出这个实例&#xff0c;并提供给外界 那么如何自己创建实例而不让外界创建呢&#xff1f;很简单&#xff0c;我们将无参的构造函…

麦芽糖-刀豆球蛋白A,maltose-ConcanavalinA,刀豆球蛋白A-PEG-麦芽糖

麦芽糖-刀豆球蛋白A,maltose-ConcanavalinA,刀豆球蛋白A-PEG-麦芽糖 中文名称&#xff1a;麦芽糖-刀豆球蛋白A 英文名称&#xff1a;maltose-ConcanavalinA 别称&#xff1a;刀豆球蛋白A修饰麦芽糖&#xff0c;ConA-麦芽糖 还可以提供PEG接枝修饰麦芽糖&#xff0c;麦芽糖…

SpringCloud-alibaba-Nacos 从理论到落地使用

Nacos: Dynamic Naming and Configuration Service 就是&#xff1a; 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。、 下面是生态图&#xff1a; Nacos EurekaConfig Bus 即 Nacos就是注册中心 配置中心的组合 他能干什么呢&#xff1f; 1、替代Eu…

防火墙firewalld

RHEL7中有几种防火墙共存&#xff1a;firewalld、iptables、ebtables等。基于iptables的防火墙默认不启动&#xff0c;但仍然可以继续使用。RHEL7默认使用firewalld作为防火墙&#xff0c;管理工具是firewall-cmd。RHEL7的内核版本是3.10&#xff0c;在此版本的内核里防火墙的包…