【持续更新】【pat】pat刷题技巧记录
修改code completion快捷键位CTRL+ENTER,帮助提示函数名称
修改命令行提示符的属性,开启快速编辑模式,方便调试
添加c++11语言标准支持
开启代码调试功能
对输入的字符串进行切割时,可以使用scanf按照指定格式分别输入达到切割效果,比如:
//对于这样的输入
3-10 99
11-5 87
102-1 0
//对于这种格式不绝对统一的字符串,可以自己构造相应的scanf分割对应的数据
scanf("%d-%d %d", &t, &num, &score);
对于需要进行除法运算的变量,并且有精确度要求的时候,可以这样
double grade =0;
//其中fullscore数组为int类型,在*1.0小数之后,自动转换为浮点型
grade += fullscore[j] * 1.0 / 2;
//或者这样强转
grade += (double)fullscore[j]/2;
如果在getline读取行之前还有其它的输入字符(不管是字符还是整数),则需要保证在调用getline函数之前,使用getchar()函数读取一次回车符,然后再调用
#include<iostream>
using namespace std;
int main() {
char n;
scanf("%c",&n);
getchar();
string str;
getline(cin,str);
cout<<str;
}
散列表的应用:在需要进行遍历数组内容,判断某一个元素是否存在时,可以使用一个大数组,初始化为0,录入数据时,相应数据(把下标看成数据)的内容修改为1,这样判断的时候直接判断a[element]==1即可,其中element为录入的数据。这样就把O(n)级别的时间复杂度降到了O(1)
atoi&stoi(stol)&strtol区别
即使不记得也没关系,只要记住以下用法即可
//数字型变量转字符串
to_string();//c++全局函数
//字符串转数字
stoi();//to int
stol();//to long
stof();//to float
//都需要导入#include <string>
四舍五入,可以先double +0.5然后转int取整数部分,也可以用cmath
的函数round()
数组,字符串或其它常用stl容器大规模清零或者填充数据可以使用fill()
函数
// fill algorithm example
#include <iostream> // std::cout
#include <algorithm> // std::fill
#include <vector> // std::vector
int main () {
std::vector<int> myvector (8); // myvector: 0 0 0 0 0 0 0 0
std::fill (myvector.begin(),myvector.begin()+4,5); // myvector: 5 5 5 5 0 0 0 0
std::fill (myvector.begin()+3,myvector.end()-2,8); // myvector: 5 5 5 8 8 8 0 0
std::cout << "myvector contains:";
for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
output
myvector contains: 5 5 5 8 8 8 0 0
将十进制a转换为b进制数,当a不为0时,将a%b从后往前倒序保存下来,每次保存后将a/b。这样倒序保存的数就是十进制a在b进制下的结果。
进制互转代码参考如下
#include<iostream>
#include<cstdlib>
using namespace std;
int main(){
//把8进制的17转化为10进制打印输出
string str = "17";
char *tmp ;
long result = strtol(str.c_str(),&tmp,8);
cout<<result;
return 0;
}
#include<iostream>
#include<algorithm>
using namespace std;
//digital为10进制数,r为需要转换的目标进制,返回目标进制数
string dtox(int digital,int r){
string result="";
const char s[37]="0123456789abcdefghijklmnopqrstuvwxyz";
if(digital==0){
return "0";
}
while(digital!=0){
int tmp =digital%r;
result+=s[tmp];
digital/=r;
}
reverse(result.begin(),result.end());
return result;
}
int main(){
cout<<"十进制10转为16进制结果:"<<dtox(10,16)<<endl;
cout<<"十进制10转为8进制结果:"<<dtox(10,8)<<endl;
cout<<"十进制10转为2进制结果:"<<dtox(10,2)<<endl;
cout<<"十进制10转为10进制结果:"<<dtox(10,10)<<endl;
}
尽量使用c++的string类
读取整行的代码如下
string str;
getline(cin,str);//该函数在std标准库中,不需要引入string头文件
c++的string类可以转化为c的字符数组,str.c_str();
int gcd(int a,int b){
return b==0?a:gcd(b,a%b);
}
int lcm(int a,int b){
return a*b/gcd(a,b);
}
对于一些可以事先进行预处理然后用散列表来求解的问题,可以大大减少时间复杂度。比如一个需要大量查询斐波那契数列的问题中,我们可以事先把前N个斐波那契数列求解出来然后放到散列表中进行保存,之后的查询就都是O(1)的时间复杂度。
▲多利用位运算来求解交集,并集,差集,可以大大减少时间复杂度,降低编码难度。
素数的判断
bool isPrime(int n){
if(n <= 1) return false;
int sqr = (int)sqrt(1.0*n);
for(int i = 2;i<=sqr; i++){
if(n%i==0) return false;
}
return true;
}
常用C++ STL容器
C++ container
- Sequence containers
- Sequence container adapters
- Associative containers
- Unordered associative containers
- unique key
- same key
algorithm头文件常用函数
algorithm
- max
- min
- abs
- swap
- reverse
- is_permutation
- next_permutation
- prev_permutation
- fill
- sort
- lower_bound
- upper_bound
大数组必须定义为全局变量
字符数组要多开一个单位
string.find()返回的是下标的值,没有找到用==string::npos
本文持续更新,敬请关注
原文地址:https://www.cnblogs.com/ericling/p/11888344.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 傅里叶变换有什么用?
- 剑指Offer第4题详解(附Java、Python源码)
- 帅地问我:Dubbo服务调用过程
- 用两个栈实现队列详解(附Java、Python源码)——《剑指Offer》
- PS2020制作电子签名
- 原创 | 险些翻车,差一点没做出来的基础算法题
- 原创 | 你追我,如果你追到我……那就算你赢了
- 原创 | 详解gitignore的使用方法,让你尽情使用git add .
- 第31天:面试比 KMP 还容易被问到的匹配算法!
- 原创 | 深度学习开篇,来聊聊感知机的原理
- 算法题:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字
- 使用Java和Python解题:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
- R语言中%||%是什么意思?
- 原创 | 你会用缓存吗?详解LRU缓存淘汰算法
- 用Java实现:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。