如何读入vector、使用sort、蛇形输出、计算n次方的pow()、遍历二维数组的上、下三角区
1. 已知n个数据,如何将n个数据存入vector<int>
容器中?
vector<int> q;
int n;
cin >> n;
for(int i = 0;i < n;i ++ ) {
int num;
cin >> num;
q.push_back(num);
}
2. 如何使用vector中的sort()
?
vector<int> q; // q中有n个data
// 降序,第三个参数加上greater<int>()
sort(q.begin(),q.end(),greater<int>() );
// 升序
sort(q.begin(),q.end());
3. 如何对二维矩阵进行顺时针蛇形IO处理?
// dx[d],dy[d]表示一个方向
int d = 0,dx[4] = {0,1,0,-1},dy[4] = {1,0,-1,0};
// 当前位置为x,y
int x = 0,y = 0;
for(int i = 0;i < 9;i ++) {
// 将当前数据赋值给二维数组,位置要标记
res[x][y] = q[i];
flag[x][y] = true;
// 计算下一步该如何走?
// --不改变方向 or 改变方向
int a = x + dx[d],b = y + dy[d];
// flag[a][b]:一定要判断下一步坐标(a,b)是否之前已访问过
if(a < 0 || a >= 3 || b < 0 || b >= 3 || flag[a][b]) {
d = (d + 1) % 4;
a = x + dx[d],b = y + dy[d];
}
// 更新x,y
x = a,y = b;
}
4. pow()函数如何使用?
// 在cmath头文件中
#include <cmath>
// 定义一个底数和指数即可,非常简单
double base = 2.0;
int exponent = 3;
double result = pow(base, exponent);
5. 如何遍历上三角区?
// 保证列数从行数+1开始即可,同理下三角区保证列数比行数-1
// 计算上三角区之和
double sum = 0;
for(int i = 0;i < 12;i ++)
for(int j = i + 1;j < 12;j ++)
sum += x[i][j];
// 计算下三角之和
double sum = 0;
for(int i = 1;i < 12;i ++)
for(int j = 0;j < i;j ++)
sum += x[i][j];
6.如何对二维数组按照第二维数组第一个元素作为关键字排序?
// 排序前
vector< vector<int> > ans = { {2,5},{1,3},{6,7},{4,8},{10,11} };
// sort默认按照元素第一个位置作为关键字升序排序
sort(ans.begin(),ans.end() );
// 结果为:{ {1,3},{2,5},{4,8},{6,7},{10,11} }
// 若要降序,传入cmp参数
// cmp中传入的是两个const比较对象,这里比较的是vector<int>
bool cmp(const vector<int>& a,const vector<int>& b) {
return a[0] > a[1]; // ">"说明前一个比后一个大 说明降序
}
sort(ans.begin(),ans.end(),cmp );
// 结果为:{ {10,11},{6,7},{4,8},{2,5},{1,3} }