PTA总结

基础

基本数据类型

类型取值范围大致范围
int-2147483648 ~ 2147483647-2*109~2*109
long long-2^63 ~ (2^63-1)-910^18 ~ 910^18
float-2^128 ~ 2^128实际精度6~7位
double-2^1024~2 ^ 1024实际精度15~16位
char-128 ~ 127-128 ~ 127
bool0(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冬季乙级考试总结

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值