在 C++ 中打印无序数组中总和相等的所有对
在这个问题中,我们有一个无序数组,我们需要打印在这个数组中和相等的全部对。
我们举一个例子来理解这个问题 −
Input: array = [12, 13, 20, 5] Output: [12, 13] and [20, 5] have sum 25.
要解决这个问题,我们将不得不找到总和相同的对。为此,我们将检查总和相同的对。并为避免重复的对,我们将使用映射。
为此,我们将需要两个映射,一个用于存储所有总和对及其总和,另一个用于存储所有总和及其对应的对。
所以,Map1 → 键 = 对;值 → 总和
Map2 → 键 = 总和整数;值 → 对的向量
现在,打印所有总和相同的值。
示例
程序来说明上述逻辑 −
#include <bits/stdc++.h>
using namespace std;
void findEqualSumPairs(int A[], int n){
map<int, vector<pair<int, int> > >map1;
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
pair<int, int> p = make_pair(A[i], A[j]);
map1[A[i] + A[j]].push_back(p);
}
}
for (auto value = map1.begin(); value != map1.end(); value++) {
if (value->second.size() > 1) {
for (int i = 0; i < value->second.size(); i++) {
cout<<"[ "<<value->second[i].first<<", "<<value->second[i].second<<"] ";
}
cout<<"have sum : "<<value->first<<endl;
}
}
}
int main() {
int A[] = { 6, 4, 12, 10, 22,11, 8, 2 };
int n = sizeof(A) / sizeof(A[0]);
cout<<"Pairs with same sum are : \n";
findEqualSumPairs(A, n);
return 0;
}输出
总和相同的对为 −
[ 6, 4] [ 8, 2] have sum : 10 [ 4, 8] [ 10, 2] have sum : 12 [ 6, 8] [ 4, 10] [ 12, 2] have sum : 14 [ 6, 10] [ 4, 12] have sum : 16 [ 6, 12] [ 10, 8] have sum : 18
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP