STL(vector)练习题单
- 一、vector 基本操作
- 题目描述
- 输入描述
- 输出描述
- 样例
- 参考答案
- 二、杨辉三角
- 三、中位数
- 题目描述
- 输入描述
- 输出描述
- 样例
- 参考答案
一、vector 基本操作
题目描述
给定一个长度为 n n n 的序列 a a a。现在有 m m m 次操作:
1 q
:删除除能够整除 q q q 的元素
2
:将序列翻转后输出,若元素个数为 0 0 0,则输出"null"
。
3
:输出序列当前的元素个数
输入描述
m + 2 m+2 m+2 行。
第 1 1 1 行为正整数 n , m n,m n,m。
第 2 2 2 行为序列 a a a。
接下来 m m m 行,为 m m m 次操作。
输出描述
输出答案。
样例
输入
5 4 8 6 3 7 5 2 1 2 3 2
输出
5 7368 3 3 7 5
参考答案
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int n, m;
vector <int> a;int main()
{cin >> n >> m;for (int i = 1; i <= n; i++){int tmp;cin >> tmp;a.push_back(tmp);}for (int i = 1; i <= m; i++){int comm;cin >> comm;if (comm == 1){int q;cin >> q;for (int i = 0; i < a.size(); i++){if (a[i] % q == 0){a.erase(a.begin()+i);i--; // 一定要把i--,否则会跳过下一个元素}}}else if (comm == 2){if (a.empty()){cout << "null\n";}else{reverse(a.begin(), a.end());for (int i = 0; i < a.size(); i++){cout << a[i] << " ";}cout << endl;}}else{cout << a.size() << endl;}}return 0;
}
二、杨辉三角
#include <iostream>
#include <vector>
#include <cstdio>
using namespace std;int n;
vector <vector <int> > a(2005);int main()
{freopen("tria.in", "r", stdin);freopen("tria.out", "w", stdout);cin >> n;for (int i = 1; i <= n; i++){a[i].resize(i+1); // 记得拓宽大小for (int j = 1; j <= i; j++){if (j == 1 || i == j){a[i][j] = 1;}else{a[i][j] = (a[i-1][j-1] + a[i-1][j]) % 1000;}}}for (int i = 1; i <= n; i++){for (int j = 1; j <= i; j++){cout << a[i][j] << " ";}cout << endl;}fclose(stdin);fclose(stdout);return 0;
}
三、中位数
题目描述
给定一个长度为 n n n 的非负整数序列 < a 1 , a 2 , a 3 , … , a n > <a_1,a_2,a_3,…,a_n> <a1,a2,a3,…,an>,求前奇数项的中位数(即平均数)。
输入描述
2 2 2 行。
第 1 1 1 行一个正整数 n n n。
第 2 2 2 行一个序列 a a a。
输出描述
n + 1 2 \frac{n+1}{2} 2n+1 行,第 k k k 行是第 1 1 1 至第 2 k − 1 2k-1 2k−1 个数字的中位数(即平均数)。
样例
输入
7 1 3 5 7 9 11 6
输出
1 3 5 6
参考答案
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int n;
int sum;
int average;
vector <int> a;int main()
{cin >> n;for (int i = 1; i <= n; i++){int tmp;cin >> tmp;a.push_back(tmp);sort(a.begin(), a.begin()+i);if (i % 2 == 1){cout << a[i/2] << endl;}}return 0;
}