[C++] STL中的向量容器<vector>附加练习

讲在前面(必看)

本篇为练习篇, vector讲解篇在这里.
菜鸟食用前请做好心理准备(你懂的)

八卦阵

题目描述

n 名同学在演练八卦阵法!具体而言,n名同学分别组成了 8 个队伍,编号为 1~8,是为“八卦阵”。
然而,为使得阵法虚虚实实,同学们开始变阵啦。具体而言,一次变阵用x, y两个数表示,就是将x号队伍与y号队伍整体交换。
请输出最后的阵型吧。

输入格式

输入共m+2行:
第 1 行,两个整数n, m,为同学人数和变阵次数;
第 2 行,n个整数a[1], a[2], ..., a[n],依次为同学的编号。约定第1~8个(即a[1], a[2], ..., a[8])分别属于1~8队,第9~16个同学分别属于1~8队,以此类推;
之后m行,每行两个整数x, y,表示本次变阵将x号队伍与y号队伍整体交换。

输出格式

输出共8行:
每行依次为1,…,8号队伍的学员编号,每支队伍的学员编号输入顺序排列;保证每个队伍都有人。

输入输出样例

input:

11 2
3 4 5 1 2 8 9 10 11 6 7
1 2
3 4

output:

4 6
3 11
1
5 7
2
8
9
10

数据范围

8 ≤ n ≤ 1000;1 ≤ m ≤ 100;1 ≤ a[1], a[2], ..., a[n], 1000,000,000;1 ≤ x, y ≤ 8。

AC代码及要点

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

vector<int> q[10];

int main(){
	int n, m;
	cin >> n >> m;
	for(int i = 0; i < n; i++){
		int x;
		cin >> x;
		// 分组并插入
		q[i % 8].push_back(x);
	}
	// 输入并交换
	for(int j = 0; j < m; j++){
		int x, y;
		cin >> x >> y;
		swap(q[x - 1], q[y - 1]);
	}
	// 循环并输出
	for(int i = 0; i < 8; i++){
		for(int j = 0; j < q[i].size(); j++){
			cout << q[i][j] << ' ';
		}
		cout << endl;
	}
	return 0;
}

本题最难点在于分组的方法, 其实用一个%取余符号就解决了.

决赛应援

题目描述

2 支篮球队伍进入了篮球大赛决赛!每个篮球队伍都有自己的球迷团,每位球迷都有自己的编号,约定球迷编号为奇数的支持队伍一,偶数的支持队伍二。
请根据 n 个球迷的编号,确定队伍一、二的球迷团名单。

输入格式

输入共 2 行:
第 1 行,一个整数 n,为球迷总人数;
第 2 行,n 个整数a[1], a[2], ..., a[n], 依次为球迷的编号。

输出格式

输出 2 行:
第 1 行,队伍一的球迷团编号,按输入顺序输出;
第 2 行,队伍二的球迷团编号,按输入顺序输出。

输入输出样例

input:

8
3 4 1 2 9 8 6 7

output:

3 1 9 7
4 2 8 6

数据范围

1 ≤ n ≤ 100,000;1 ≤ a[1], a[2], ..., a[n] ≤ 100,000,000。

AC代码及要点

#include <iostream>
#include <vector>
using namespace std;

vector<int> v1, v2;

int main()
{
    int n;
    cin >> n;
    for(int i = 0; i < n; i++){
    	int x;
    	cin >> x;
    	if(x % 2 == 0) v2.push_back(x);
    	else v1.push_back(x);
    }
    for(int i = 0; i < v1.size(); i++){
    	cout << v1[i] << ' ';
    }
    cout << endl;
    for(int i = 0; i < v2.size(); i++){
    	cout << v2[i] << ' ';
    }
    return 0;
}

这道题总体简单, 只要注意数据分组就好了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值