目录

基础

基本数据类型

类型 取值范围 大致范围
int -2147483648 ~ 2147483647 -2*10^9~2*10^9
long long -2^63 ~ (2^63-1) -9*10^18 ~ 9*10^18
float -2^128 ~ 2^128 实际精度6~7位
double -2^1024~2 ^ 1024 实际精度15~16位
char -128 ~ 127 -128 ~ 127
bool 0(false) or 1(true) 0(false) or 1(true)

scanf格式符

类型 取值范围
int %d
long long %lld
float %f
double %lf
char %c
字符串(遇空格结束) %s
字符串(遇换行结束) %[^\n]s

printf格式符

类型 格式符
int %d
long long %lld
float %f
double %lf
char %c
字符串 %s
无符号int %ud(m为宽度)
——— ———-
作用 格式符
宽度 %md(m为宽度)
左对齐 %-md(m为宽度)
右对齐 %md(m为宽度)
保留小数 %.nf(n为保留的小数的位数)

最大公约数

int gcd(int a,int b){
    return !b?a:gcd(b,a%b);
}

最小公倍数

//先求最大公约数d
a*b/d;  //最小公倍数=a*b/最大公约数
a/d*b;  //怕溢出就写成

素数

素数的判断

bool isprime(int n){
    if(n<=1)return false;
    for(int i=2;i*i<=n;i++){
        if(!n%i)return flase;
    }
    return true;
}

筛选法获取素数

用上面素数的判断来求素的方法,当n<10^5时是可以承受的,但如果需要求更大范围的数则可以用下面的算法:筛选法

int num[100],l=0;//num存素数
bool p[100]={0};
for(int i=2;i<100;i++){
    if(p[i]==false){
        num[l++]=i; i是素数就存起来
        for(int j=i+i;j<100;j+=i){
            p[j]=true;  //把i的倍数全部筛选掉
        }
    }
}

sscanf与sprintf

sscanf与sprintf分别可以理解为sscanf = string + scanf 与 sprintf = string + printf

string str="123abc";
char ch[50];
int a;
sscanf(str.c_str(),"%d",&a);    //sscanf是把字符串str以"%d"的格式写到a中
sprintf(ch,"%d",a);    //sprintf是把a以"%d"的格式写到ch字符数组中
//string类要使用sscanf时需要写成 str.c_str() 但用在sprintf会报错,不知道什么原因,就先使用字符数组ch存吧
str=ch;     //可以用字符数组存,然后再赋值给string

cout<<a<<" "<<ch<<endl; //打印结果为 123 123

常用math函数

fabs(double x)  //取绝对值

floor(double x) //向下取整
ceil(double x)  //向上取整
round(double x) //四舍五入

pow(double r,double p)  //返回r^p

sqrt(double x)  //算术平方根

log(double x)   //返回以e为底的对数

浮点数的比较

由于浮点数在计算机总的存储并不总是精确的,且在C/C++中的“==”操作是完全相同才能判True,所以需要引入一个极小数来对这种误差进行修正。

const double eps = 1e-8 //取误差的范围
//a等于b
#define Equ(a,b) ( ( fabs((a)-(b)) ) < eps )    //定义宏 当a、b的误差比eps小时,可以认为a=b

//a大于b
#define More(a,b) ( ( (a)-(b) ) > (eps) )   //当a-b大于eps,可以认为a>b

//a小于b
 #define Less(a,b) ( ( (a)-(b) ) < (-eps) ) //当a-b小于-eps,可以认为a<b

//a大于等于b
 #define MoreEqu(a,b) ( ( (a)-(b) ) > (-eps) ) //当a-b大于-eps,可以认为a>=b

 //a小于等于b
 #define LessEqu(a,b) ( ( (a)-(b) ) < (eps) ) //当a-b小于eps,可以认为a<=b

字符函数库 ctype.h

字符函数库中函数用于对单个字符的操作。

isalnum()   //判断字符是否为字母或数字函数
isalpha()   //判断字符是否为英文字母函数

islower()   //判断字符是否为英文小写字母函数
isupper()   //判断字符是否为英文大写字母函数
//是则返回true,否则返回false


toupper()   //将字符转换为大写字母函数
tolower()   //将字符转换为小写字母函数
//返回转换后的字符

二分查找

二分查找是基于有序序列的查找算法,该算法一开始另[left,right]为整个序列的下标区间,然后每次测试当前[left,right]的中间位置mid=(left+right)/2,判断a[mid]与欲查询的元素X的大小。
以下为实现的代码。

int binary_search(int a[],int l,int r,int num){
    int mid;
    while(l<=r){
        mid=(l+r)/2;
        if(a[mid]==num) return mid;
        else if (a[mid]>num) r=mid-1;
        else l=mid+1;
    }
    return -1;
}

PTA刷题模板

考试的时候敲一遍,复制几份。

#include<iostream>
#include<string>
#include<vector>
#include<map>
#include<unordered_map>
#include<cmath>
#include<set>
#include<queue>
#include<cstdio>
#include<algorithm>
using namespace std;

int main(){ 
    #ifdef ONLINE_JUDGE
    #else
        freopen("1.txt","r",stdin); //文件输入
    #endif  


    return 0;
}

//偷懒可以用万能头文件😄

#include<bits/stdc++.h>//万能头文件
using namespace std;
int main(){
    #ifdef ONLINE_JUDGE
    #else
        freopen("1.txt","r",stdin); //文件输入 
    #endif

    return 0;
}

数据结构

STL

STL

链表

链表

树的知识点

考试总结

2019冬季乙级考试总结