前言:
前段时间想起来vector做的一直是单变量,一直没有做双变量的样例。正巧今天下午看了一眼素数判断,希望对周六的蓝桥杯有一点帮助。
vector双变量
形式:
关于vector的描述,我们再前面的章节提到过,这里我们不做过多赘述。在这里我们提到的是一个vector里面的双变量,就是下面的形式:
3 5
1 4
6 8
……
不同点:
对于vector的双变量,不同于单变量的是:
1.多了一个头文件
#include<utility>
对于这个头文件,我们不需要做过多理解。在这里它的作用是提供pair模板类,其中包含两个元素,常用于返回两个值的函数。注意:这个模板类不限制两个元素各自的元素类型,换言之,我可以让第一个数是int类型,第二个数是float类型。
实现:
在这里我们规定一个情境:有n组数据,输入格式为:第一行输入n,后面n行依次输入要测试的两个数据。在这里我们将输出规定为原样输出测试已键入的数据。
#include<iostream>
#include<vector>
#include<utility>
using namespace std;
int main() {
int n; // 一共有n组数据
cin >> n; // 输入n的值
vector<pair<int, int>> v;
int a, b; // 定义两个元素
while (n--) {
cin >> a >> b; // 依次输入两个元素
v.push_back(make_pair(a, b)); // 将两个元素键入动态数组v中
}
for (auto i : v) { // 使用for循环遍历数组v
cout << i.first << " " << i.second << endl; // 原样输出测试数据
}
return 0;
}
素数判断:
素数判断这个问题大家都不陌生,不过我在文心上学到了一种判断方法也具有一定的可行性。
判断:
bool sushu (int x) { // 素数判断函数
if (x <= 1)
return 0; //小于等于1的不是素数
if (x == 2 || x == 3)
return 1; // 2或3都是素数
if (x % 2 == 0 || x % 3 == 0)
return 0; // 能整除2或3都不是素数
for (int i = 5; i * i <= x; i++) {
if (x % i == 0)
return 0; // 有因数的都不是素数
}
return 1; // 其他的都是素数
}
完整代码:(大家可以尝试一下)
#include<iostream>
#include<vector>
#include<utility>
using namespace std;
bool sushu (int x) { // 素数判断函数
if (x <= 1)
return 0; //小于等于1的不是素数
if (x == 2 || x == 3)
return 1; // 2或3都是素数
if (x % 2 == 0 || x % 3 == 0)
return 0; // 能整除2或3都不是素数
for (int i = 5; i * i <= x; i++) {
if (x % i == 0)
return 0; // 有因数的都不是素数
}
return 1; // 其他的都是素数
}
int main( ) {
int n;
cin >> n;
int x;
while (n--) {
cin >> x;
if (sushu(x))
cout << x << " 是素数" << endl;
else
cout << x << " 不是素数" << endl;
}
return 0;
}
vector双变量与素数判断相结合:
情境:
鉴于当下没有合适的样例,我们就先把两者大致结合吧。
有n组数据,输入格式为:第一行输入n,后面n行依次输入要测试的两个数据。本题我们做判断双变量是否都是素数;是则交换输出顺序,否则输出二者数值和。
思路:
这个题的表述相当清晰,所以我们的思路也相当清晰。
首先,本体核心是判断是否是素数,所以我们可以先写一个素数判断函数。其次定义一个双变量vector;然后,依次键入样例数据;最后根据题意输出数据。
代码实现:(可以i尝试一下)
#include<iostream>
#include<vector>
#include<utility>
#include<cmath>
using namespace std;
bool sushu (int x) {
if (x <= 1) return 0;
if (x == 2 || x == 3) return 1;
if (x % 2 ==0 || x % 3 ==0) return 0;
for (int i = 5; i * i <= x; i += 6) {
if (x % i == 0 || x % (i + 2) == 0)
return 0;
}
return 1;
}
int main() {
int n;
cin >> n;
vector<pair<int, int>> v;
int a, b;
while (n--) {
cin >> a >> b;
v.push_back(make_pair(a, b));
}
for (auto i : v) {
if (sushu(i.first) && sushu(i.second))
cout << i.second << " " << i.first << endl;
else
cout << i.first + i.second << endl;
}
return 0;
}
输入:
5
17 27
34 90
58 3
67 23
20 678
输出:
44
124
61
23 67
698