函数题·

6-1递增的整数序列链表的插入·

6-2线性表元素的区间删除·

6-3有序表的插入【有题解视频,可本地编译器调试】·

6-4合并两个有序数组·

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <stdio.h>
#include <stdlib.h>
/*
7 1 2 14 25 33 73 84
11 5 6 17 27 68 68 74 79 80 85 87
1 2 5 6 14 17 25 27 33 68 68 73 74 79 80 84 85 87
*/
//注意print函数不用交
void printArray(int* arr, int arr_size)
{
for(int i=0;i<arr_size;i++)
printf("%d ",arr[i]);
}

void merge(int* a, int m, int* b, int n, int* c)
{
int i=0,j=0,k=0;
while(i!=m&&j!=n){
if(a[i]<=b[j]) c[k++]=a[i++];
else c[k++] = b[j++];
}
if(i==m){
while(j!=n) c[k++] = b[j++];
}
else{
while(i!=m) c[k++] = a[i++];
}
}

int main(int argc, char const *argv[])
{
int m, n, i;
int *a, *b, *c;
scanf("%d", &m);
a = (int*)malloc(m * sizeof(int));
for (i = 0; i < m; i++) {
scanf("%d", &a[i]);
}
scanf("%d", &n);
b = (int*)malloc(n * sizeof(int));
for (i = 0; i < n; i++) {
scanf("%d", &b[i]);
}
c = (int*)malloc((m + n) * sizeof(int));
merge(a, m, b, n, c);
printArray(c, m + n);

return 0;
}

都没到m,n,就根据大小填充,一个到终点后,就while循环将另一个数组的剩余元素填充。

6-5删除单链表偶数节点·

6-6逆序数据建立链表·

6-7求链表的倒数第m个元素·

6-8顺序表操作集·

6-9邻接矩阵存储图的深度优先遍历·

6-10二叉树的非递归遍历·

6-11二叉树的遍历·

6-12求二叉树高度·

6-13邻接表存储图的广度优先遍历·

编程题·

7-1一元多项式的乘法与加法运算·

7-2符号配对·

7-3银行业务队列简单模拟·

7-4顺序存储的二叉树的最近的公共祖先问题·

7-5 修理牧场·


7-6旅游规划·

7-7公路村村通·

7-8畅通工程之最低成本建设问题·

7-9哈利·波特的考试·

7-10 QQ帐户的申请与登陆·


7-11人以群分·

7-12寻找大富翁·

n个元素排序,输出前m个。快排

寻找大富翁(C语言)_KonBAI-Q的博客-CSDN博客

7-1 寻找大富翁 (25 分)(思路加详解+两种做法(一种优先队列,一种vector容器))_天天向上的菜鸡杰!!的博客-CSDN博客

测试点分别是sample 有相等数字 N小于M 最大规模数据,逆序输入

还是感觉很离谱,结合题目完全想不到是因为m可能大于n(一直丢了一分)

还以为是卡Long Long

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1e6+10;
int main(){
int n,m;
long long a[N];
cin>>n>>m;
for(int i=0;i<n;i++) cin>>a[i];
sort(a,a+n);
int t=m<n?m:n;//选择较小的
for(int i=n-1;t-->0;i--){
cout<<a[i];
if(t) cout<<" ";
}
cout<<endl;
return 0;
}

7-13PAT排名汇总·