pat 甲级 知识积累

断断续续也做了30多个题了,不总结一下乱做也没效果,有一些还是要背一背的

♦ 1002 有一个输出问题, 注意输出格式, 尽量多用scanf printf ,做到现在基本只有在用到string的时候只能cin cout 。

♦ 开数组大小的时候要考虑全面,有些时候不通过或者显示段错误的话就把数组再开大点。。

♦ 目前遇到的dijkstra题都还没去研究,,接下来这几天的目标就是继续刷题,然后像动态规划,图论,贪心算法这种还没学模板性质的题学习一下。

♦ 巧妙应用string,好多题都可以直接用string简化运算,string可以用数组下标访问,可以直接比较大小,直接进行加减法,reverse函数可以吧把string直接反转。

♦ 有几次编译器报错的时候,是变量名的问题,目前遇到的有begin,rank ,都是不可以拿来做变量名的。

♦取整,四舍五入。之前有过的坑点是有一些会5舍6入,解决的办法是+0.001。还有几个函数在cmath里面

ceil(a)  向上取整
floor(a) 向下取整
round(a) 四舍五入

♦ 结构体排序,常见题型。1028, 1012

自定义比较函数,从大到小排就‘>’。
当出现 “如果分数相同,就按学号升序输出” 类似问题,就在比较函数里排序就可以。

bool myscore(stu a, stu b){
    if(a.score == b.score) return a.num < b.num;
    else return a.score < b.score;
}

排名名次问题

arr[0].rank = 1;
for(int i=1; i<l; i++){
    if(arr[i].score == arr[i-1].score) arr[i].rank = arr[i-1].rank;
    else arr[i].rank = i+1;
}

♦ dfs求连通分量问题

int arr[100][100];
int brr[100];

void dfs(int i){
    brr[i] = 1; //表示走过了这个点;
    for(int j=0; j<n; j++){
        if(arr[i][j] == 1 && brr[j] == 0)
        dfs(j);
    }   
}

int main(){

    for(int i=0; i<n; i++){
        if(brr[i] == 0){
            dfs(i);
            sum++;
        }
    }
    return 0;
}

♦ 模拟的题还没咋再练练,就是对STL的熟练运用吧。

♦ 素数判断,注意等号

int isprime(int a){
    for(int i=2; i*i <= a; i++){
        if(a%i==0) return 不是素数;
    }
    return 是素数;
}

♦ 进制转换

do{
    arr[l++] = n%d;
    n /= d;
  }while(n != 0);
  for(int i=0; i<l; i++){
      n = n*d + arr[i];
  }

写累了,还有十多道题没总结完。。

♦ 用cin cout超时又需要存储字符串的话用char数组,比较用 strcmp() , 大小用 strlen()。

strcmp( a, b );

a == b 返回  0
a > b  返回 >0
a < b  返回 <0

♦ 根据后序中序求前序(多理解几次!)

void pre(int root,int start, int end){
    if(start > end) return;
    int i = start;
    while(i < end && 中序[i] != 后序[root]) i++;
    printf("%d ",后序[root]);
    pre(root - 1 - end + i,start,i-1);
    pre(root - 1, i + 1, end);
}

♦ STL指针
个人理解为模板形式

set/vector...<int>::iterator it;
for(it = s.begin(); it != s.end(); it++)
    printf("%d",*it);

♦ STL模板 nth_element
可以用来取中间数

#include <algorithm>

nth_element(arr.begin(),arr.begin+(l-1)/2,arr.end());

♦ vector 初始化用resize();

——8.14 总结到1037——

猜你喜欢

转载自blog.csdn.net/mdzz_z/article/details/81670240