输入分三行。
第一行给出序列的公共长度 N(0 < N ≤ 100000),随后每行输入一个序列的信息,即 N 个非降序排列的整数。数字用空格间隔。
输出格式
在一行中输出两个输入序列的并集序列的中位数。
输入样例 1
5 1 3 5 7 9 2 3 4 5 6
输出样例 1
4
输入样例 2
6 -100 -10 1 1 1 1 -50 0 2 3 4 5
输出样例 2
1
代码
#include<iostream> #include<algorithm> usingnamespace std; intmain(){ int n; cin >> n; int a[n]; int b[n]; for (int i = 0; i < n; i++){ cin >> a[i]; } for (int i = 0; i < n; i++){ cin >> b[i]; } int c[2 * n]; for (int i = 0; i < n; i++){ c[i] = a[i]; } for (int i = 0; i < n; i++){ c[i + n] = b[i]; } sort (c, c + 2 * n); int r = (2 * n - 1) / 2; cout << c[r] << endl;
return0;
}
2-5 集合减法
分数:6
作者:朱允刚
单位:吉林大学
给定两个非空集合 A 和 B,集合的元素为 30000 以内的正整数,编写程序求 A-B。
输入格式
输入为三行。
第 1 行为两个整数 n 和 m,分别为集合 A 和 B 包含的元素个数,1 ≤ n, m ≤ 10000。
第 2 行表示集合 A,为 n 个空格间隔的正整数,每个正整数不超过 30000。
第 3 行表示集合 B,为 m 个空格间隔的正整数,每个正整数不超过 30000。
#include<iostream> #include<algorithm> #include<unordered_set> #include<vector> usingnamespace std; intmain(){ int n, m; cin >> n >> m; vector<int> A(n); for (int i = 0; i < n; i++){ cin >> A[i]; } unordered_set<int> B; int num; for (int i = 0; i < m; i++){ cin >> num; B.insert(num); } vector<int> result; for (int n : A){ if (B.find(n) == B.end()){ result.push_back(n); } } sort(result.begin(), result.end()); if (result.empty() == 1){ cout << "0"; return0; } for (int i = 0; i < result.size(); i++){ cout << result[i]; if (i != result.size()){ cout << " "; } } return0; }
2-7 运用顺序表实现多项式相加
分数:7
作者:胡艳梅
单位:成都理工大学
本题要求输入两个一元多项式,然后输出它们的和(相加后得到的一元多项式)。
输入格式
输入一个整数 n(表示输入组数),然后依次输入每一组数据:
输入一个整数 A(表示多项式的项数,小于 100),然后输入 A 对整数,每一对整数表示对应项的指数和系数。
输入有 4 行。
第 1 行是一个正整数 m,表示第 2 行有 m 个整数,这些整数构成一个非降序序列,每个整数之间以空格隔开。
第 3 行是一个正整数 n,表示第 4 行有 n 个整数,这些整数也构成一个非降序序列,每个整数之间以空格隔开。
输出格式
把第 2 行的 m 个整数和第 4 行的 n 个整数合并成一个非降序序列,输出这个整数序列。每个数之间隔 1 个空格。
输入样例
6
1 3 6 6 8 9
4
2 4 5 7
输出样例
1 2 3 4 5 6 6 7 8 9
代码
#include<iostream> usingnamespace std; intmain(){ int m, n; cin >> m; int a[m]; for (int i = 0; i < m; i++){ cin >> a[i]; } cin >> n; int b[n]; for (int i = 0; i < n; i++){ cin >> b[i]; } int p = m + n; int c[p]; int x = 0; int y = 0; int z = 0; while (x != m && y != n){ if (a[x] <= b[y]){ c[z] = a[x]; z++; x++; } else{ c[z] = b[y]; z++; y++; } } if (x == m){ while (y != n){ c[z] = b[y]; z++; y++; } } else{ while (x != m){ c[z] = a[x]; z++; x++; } } for (int i = 0; i < m + n; i++){ cout << c[i] << " "; } return0; }
intmain(int argc, charconst *argv[]) { int n, i; int* a; scanf("%d", &n); a = (int*)malloc(n * sizeof(int)); //动态内存分配申请数组空间 for (i = 0; i < n; ++i) { scanf("%d", &a[i]); }
structNode* head =NULL; //声明一个指针变量head
//创建链表,把返回的头指针赋值给head指针变量 head = buildLinkedList(a, n);
//打印链表:整个链表用head来代表。 printLinkedList(head);
free(a); //释放存储空间
return0; }
输入样例
4 3 7 9 5
输出样例
5 9 7 3
代码
struct Node* buildLinkedList(int* arr, int n){ structNode* head =NULL; for (int i = 0; i < n; i++){ structNode* new = (struct Node*)malloc(sizeof(struct Node)); new->data = arr[i]; new->link = head; head = new; } return head; } voidprintLinkedList(struct Node* head){ structNode* prev = head; int flag = 1; while(prev != NULL){ if (flag == 1){ printf("%d", prev->data); flag = 0; } else{ printf(" %d", prev->data); } prev = prev->link; } }