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

保研考研机试攻略:第一章——从零开始

🍨🍨🍨欢迎大家来到保研考研机试攻略专栏,该专栏将更新我对N诺平台的计算机考研机试攻略——高分篇、满分篇教程的学习笔记和心得,N 诺是唯一 一个纯粹为计算机考研而准备的学习平台,学完这些教程的内容,相信我们都会拿到满意的机试高分,如果你也对机试考试的准备感到迷茫,来和我一起学习吧~有任何问题欢迎评论区留言或私信我,让我们一起拿捏机试,顺利上岸!!!

目录

🧊🧊🧊1.1 输入输出技巧

🥥(1)基本类型输入输出

🥥(2)gets、getchar和putchar的使用

🥥(3)输出进制转换

🥥(4)输出增加前置0

🥥(5)输出保留小数

🥥(6)输出字符ASCII码

🥥(7)cin、cout加速

🥥(8)其他经验

计算整数n的位数

不同输入结束的处理

字符串转整数

整数转字符串

🧊🧊🧊1.2 头文件问题

🧊🧊🧊1.3 时间复杂度是否可行

🧊🧊🧊1.4 STL

🥥(1)排序sort

🥥(2)查找lower_bound&upper_bound

🥥(3)优先队列priority_queue(堆)

🥥(4)vector

🥥(5)queue

🥥(6)stack

🥥(7)map

🥥(8)set


🧊🧊🧊1.1 输入输出技巧

🥥(1)基本类型输入输出

  • 输入int型变量 scanf("%d",&i);
  • 输入long long型变量 scanf("%lld",&ll)
  • 输入double型变量 scanf("%lf",&d);
  • 输入char型变量 scanf("%c",&c);
  • 输入string型变量 scanf("%s",s);
  • 输出 printf("%d %lf %c %lld %s\n",&i,&d,&c,&ll,s);

🥥(2)gets、getchar和putchar的使用

char s[200];
gets(s);//可输入带空格的字符,如Hello world!
printf("%s\n",s);char c=getchar();//只能输入一个字符,可用作string间的空格的消除
putchar(c);

🥥(3)输出进制转换

int a=10;
printf("%x\n",a);//小写十六进制输出,a
printf("%X\n",a);//大写十六进制输出,A
printf("%o\n",a);//八进制输出,12itoa(num,string,2);//转二进制
itoa(num,string,10);//转十进制
//这个函数用的时候注意有些oj环境即使用万能头也不支持

🥥(4)输出增加前置0

int a=1;
printf("%02d\n",a);//2表示宽度,不够补0:输出01

🥥(5)输出保留小数

//c语言输出固定位数小数
double a=5.2;
printf("%.2lf\n",a);//输出保留两位小数:输出5.20//c++输出固定位数小数
cout<<fixed<<setprecision(n)<<a;//保留n位小数//四舍五入保留两位小数
double rounded=std::round(a*100)/100;

🥥(6)输出字符ASCII码

printf("%d\n",'a');//97
printf("%d\n",'A');//65

提示:printf和cout尽量不要同时使用,会发生一些不可控的意外。但是建议在代码中c与c++语法混用,用c++提交。一般c++输入输出更方便些,建议使用。当输入输出有特殊要求时,cin和cout不好解决时,还是用scanf和printf解决方便一些。

🥥(7)cin、cout加速

ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);

🥥(8)其他经验

计算整数n的位数

int n;
int bit=static_cast<int>(log10(n))+1;

不同输入结束的处理

//1告诉有n组,直接for循环输入
for(int i=0;i<n;i++){}//2以“0 0”表示输入结束
cin>>a>>b;
while(a!=0&&b!=0){//这里处理完数据记得cin>>a>>b;}//3什么信息也不给,自己判断后方是否还有输入,但是知道一行要输入几个数
while(cin>>a>>b){}或while(scanf("%x %x",&a,&b)!=EOF){}//4连输入一行几个数也不知道
while(getline(cin,s)){}

字符串转整数

string s;
cin>>s;
for(int i=0;i<=length;i++)
{stringstream ss;ss<<s[i];ss>>n;num=num*10+n;n=0;
}

整数转字符串

int x;
string s=to_string(x);

🧊🧊🧊1.2 头文件问题

推荐使用万能头文件:#include<bits/stdc++.h>,一般系统都支持使用。

🧊🧊🧊1.3 时间复杂度是否可行

给出一个对应关系,以时限为1s为例:

时间复杂度N的可行大小
O(N)500W(10^7)左右
O(NlogN)20W(10^6)左右
O(N^2)2000左右
O(N^2logN)700左右
O(N^3)200左右
O(N^4)50左右
O(2^N)24左右
O(N!)10左右

特殊技巧:发现算法可能超时(一般是暴力),先把这道题留一下,做其他题,可以去看一下排行榜,如果过这道题的人多,说明这道题可能数据比较水,直接暴力,出题人可能偷懒或者失误了导致数据很水。考研机试的题目数据大部分情况都比较水,不要被复杂度吓唬住了,后面会教大家如何用优雅的技巧水过去不会优化的算法。

🧊🧊🧊1.4 STL

STL的函数多在algorithm头文件中,可以直接拿来用。

🥥(1)排序sort

时间复杂度O(NlogN),对容器如struct用sort需要重载小于号

sort(begin,end+1,cmp);
//三个参数(最后一个参数可以没有)
//第一个是排序区间起点
//第二个是排序区间终点+1
//第三个是排序方法函数,默认升序,降序:greater<int>()//n个数的数组
sort(a,a+n);

🥥(2)查找lower_bound&upper_bound

时间复杂度O(logN)

  • lower_bound(begin,end+1,num):大于等于num的第一个位置
  • upper_bound(begin,end+1,num):大于num的第一个位置

两个函数都是采用二分查找的方法在一个排好序的数组中进行的查找

//n个数的数组
int pos1=lower_bound(a,a+n,11)-a;
int pos2=upper_bound(a,a+n,11)-a;

两个函数返回的都是地址,不存在就返回end+1,通过返回地址减去起始地址begin得到找到数字在数组中的下标。

  • lower_bound(begin,end+1,num,greater<int>()):小于等于num的第一个位置
  • upper_bound(begin,end+1,num,greater<int>()):小于num的第一个位置

🥥(3)优先队列priority_queue(堆)

  • q.push(num)
  • q.empty()
  • q.top()
  • q.pop()
#include <iostream>
#include <queue>
using namespace std;
int main() {priority_queue<int> q;//定义一个优先队列,默认大根堆,小根堆在int后加上greater<int>q.push(1);//入队q.push(2);q.push(3);while (!q.empty()) {//判读队列不为空cout << q.top() << endl;//队首元素q.pop();//出队}return 0;
}

🥥(4)vector

  • a.back()=4;
  • a.clear()
  • a.push_back(num)
  • a.pop_back(num)
  • a.resize(11):多删少补,默认补0
  • a.resize(11,5):补5
  • a.size()
  • a.empty()
#include <iostream>
#include <vector>
using namespace std;
int main() {vector<int> v;//定义一个空的 vectorfor (int i = 1; i <= 10; ++i) {v.push_back(i * i); //加入到 vector 中}for (int i = 0; i < v.size(); ++i) {cout << v[i] << " "; //访问 vecotr 的元素}cout << endl;return 0;
}

🥥(5)queue

#include <iostream>
#include <queue>
using namespace std;
int main() {queue<int> q;//定义一个队列q.push(1);//入队q.push(2);q.push(3);while (!q.empty()) {//当队列不为空cout << q.front() << endl;//取出队首元素q.pop();//出队}return 0;
}

🥥(6)stack

  • s.push(num)
  • s.top()
  • s.pop()
  • s.empty()
  • s.size()
#include <iostream>
#include <stack>
using namespace std;
stack<int> S;//定义一个栈
int main() {S.push(1);//入栈S.push(10);S.push(7);while (!S.empty()) {//当栈不为空cout << S.top() << endl;//输出栈顶元素S.pop();//出栈}return 0;
}

🥥(7)map

<key,value>键值对结构

  • map<int,bool> mp;
  • mp[13]=true;
  • mp.find(13)!=mp.end();
  • mp.count(12);
  • mp.erase(12);
  • mp.clear();
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main() {map<string, int> dict;//定义一个 mapdict["Tom"] = 1;//定义映射关系dict["Jone"] = 2;dict["Mary"] = 1;if (dict.count("Mary")) {//查找 mapcout << "Mary is in class " << dict["Mary"];}//使用迭代器遍历 map 的 key 和 valuefor (map<string, int>::iterator it = dict.begin(); it != dict.end(); ++it) {cout << it->first << " is in class " << it->second << endl;}dict.clear();//清空 mapreturn 0;
}

🥥(8)set

默认升序排列,且去重

  • s.insert(3);
  • s.erase(3);
  • auto it1=s.find(4),it2=s.find(6);
  • if(it1==s.end()) cout<<"no";
  • s.count(1);
#include <iostream>
#include <set>
using namespace std;
int main() {set<string> country;//定义一个存放 string 的集合country.insert("China");//插入操作country.insert("America");country.insert("France");set<string>::iterator it;//使用迭代器遍历集合元素for (it = country.begin(); it != country.end(); ++it) {cout << * it << " ";}cout << endl;country.erase("American");//删除集合内的元素country.erase("England");if (country.count("China")) {//统计元素个数cout << "China in country." << endl;}country.clear();//清空集合return 0;
}

创作不易,点个赞吧~点赞收藏不迷路,感兴趣的宝子们欢迎关注该专栏~

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 怎样才算精通 Excel?
  • linux之网络子系统-GRO机制分析
  • 09正弦稳态电路的分析
  • C语言学习笔记 Day10(指针--中)
  • 13.StringRedisTemplete使用
  • 巧用Array.forEach:简化循环与增强代码可读性;Array.forEach怎么用;面对大量数据时怎么提高Array.forEach的性能
  • C语言:字符函数,字符串函数
  • 《计算机网络 - 自顶向下方法》阅读笔记
  • 28. Hibernate 中的常见坑
  • webassembly初探
  • llama3.1本地部署方式
  • Java 中的泛型 集合(List,Set) Map
  • opencascade AIS_Line源码学习直线节点
  • 前端响应式布局解决方案分享
  • One-hot编码
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • docker python 配置
  • Docker入门(二) - Dockerfile
  • JavaScript标准库系列——Math对象和Date对象(二)
  • java正则表式的使用
  • spring + angular 实现导出excel
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 机器学习 vs. 深度学习
  • 如何进阶一名有竞争力的程序员?
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 一、python与pycharm的安装
  • 原生js练习题---第五课
  • kubernetes资源对象--ingress
  • ​你们这样子,耽误我的工作进度怎么办?
  • # dbt source dbt source freshness命令详解
  • # 利刃出鞘_Tomcat 核心原理解析(二)
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (4)Elastix图像配准:3D图像
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (苍穹外卖)day03菜品管理
  • (二)Kafka离线安装 - Zookeeper下载及安装
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (学习日记)2024.01.09
  • (转)Oracle存储过程编写经验和优化措施
  • .gitignore文件忽略的内容不生效问题解决
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .NET Core 成都线下面基会拉开序幕
  • .Net Redis的秒杀Dome和异步执行
  • .vimrc 配置项
  • /usr/bin/env: node: No such file or directory
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname
  • [2024最新教程]地表最强AGI:Claude 3注册账号/登录账号/访问方法,小白教程包教包会
  • [240607] Jina AI 发布多模态嵌入模型 | PHP 曝新漏洞 | TypeScript 5.5 RC 发布公告
  • [24年新算法]NRBO-XGBoost回归+交叉验证基于牛顿拉夫逊优化算法-XGBoost多变量回归预测