北邮复试的机试环节是可以带资料的。我整理了当时机试我准备的资料给需要的同学做参考。以下代码均可在机试环境中运行。
机试导入头文件
1 |
|
scanf & cin
- 浮点数判定相等
1
fabs(a-b)<0.000001
带逗号分隔的输入形式:
1
scanf("%d, %d",&a, &b);
getchar();
用来吃进空格,有奇用!
补充:二维数组传参:尽量少用指针!
- 合法形式:
1
2void Foo1(int array[30][30]);
void Foo2(int array[][30]); - 不能省略高维的大小!不合法形式:
1
2void Foo3(int array[][]);
void Foo4(int **array);//这种方式也是错误的
树与图
二叉链表建树套路
1 | //根据二叉排序树 |
图套路之建图
1 | struct Edge{ |
floyd算法
1 | for(int k = 1;k <= N;k++){//每次我们选取的中间节点,Floyd算法的核心。 |
dijstra算法
1 | struct E{ |
拓扑排序
1 | vector<int> edge[501]; |
动态规划
最长公共子序列与最长公共子串
1 | //最长公共子序列:输出最长序列长度 |
模板类和库函数
模板类vector
- 定义二维向量
1
vector<vector<int> > p(m, vector<int>(n,0)); //m*n的二维向量,注意空格 所有元素初始化为0
- vector成员函数
1 | // 定义一维向量 |
模板类algrithom
不修改内容的序列操作
统计返回值个数
1
count(v.begin(),v.end(),num)//统计6的个数
统计符合调剂返回值个数
1
2bool BigThan5(int &n){ return n > 5; }
count(v.begin(),v.end(),BigThan5)查找值/符合条件的值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18find(v.begin(),v.end(),num)
find_if(v.begin(),v.end(),foo)
```
### 模板类stack&queue&map
- stack&queue
``` c
# 定义
stack<int> s;
queue<int> q;
# 访问栈顶
s.top()/s.front()/s.back()
# 判断栈空/返回有效个数
s.empty()/s.size()
# 插入、删除、交换
s.push()/s.pop()/s.swap()
map
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17#初始化
map<string,double> m
#声明即插入
m["Li"] = 123.4;
#查找
data_x = m.find(key);
data_y = m[key];
if(m.find(key)==maplive.end())//查找失败
#遍历
for(map<string,double>::iterator it = m.begin(); it != m.end(); ++it)
{
cout << it->first << ":" << it->second << endl;
}
#逆序遍历
for(map<int,int>::reverse_iterator it = bag.rbegin();it!=bag.rend();it++)
#删除
m.erase(key);multimap和multimap的排序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23#初始化
multimap<int,int> bag;
#插入数据
bag.insert(make_pair(v,w));
#排序
vector<pair<int,int> > BAG(bag.begin(),bag.end())
//按键升序
sort(BAG.begin(),BAG.end());
//按值升序
sort(BAG.begin(),BAG.end(),cmp_by_value);
bool cmp_by_value(const pair<int,int> a,const pair<int,int> b){
if(a.first == b.first){
return a.second<b.second;
}
else{
return a.first>b.first;
}
}
//遍历
for(int i = 0;i < BAG.size();i++){
cout<<BAG[i].first<<" "<<BAG[i].second<<endl;
}
数学问题
1 | //浮点数判定相等 |
库函数 string的增删查改
1 | #获取带空格的字符串 |
判定字符串是否结束
1
a[i] == '\0';//字符串最后一位的后面还有'\0'结束符
字符串逆序套路:
1
2
3
4
5
6
7while(left < right){
temp = a[left];
a[left] = a[right];
a[right] = temp;
left++;
right--;
}