vector双变量与素数判断

本文介绍了如何在C++中使用vector存储双变量,并结合素数判断功能,处理输入的n组数据,判断是否都为素数,输出交换后的顺序或数值和。展示了完整代码实现和示例输入输出情况。
摘要由CSDN通过智能技术生成

前言:

前段时间想起来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

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C.G.道枝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值