用C ++打印给定总和的所有对
本文向大家介绍用C ++打印给定总和的所有对,包括了用C ++打印给定总和的所有对的使用技巧和注意事项,需要的朋友参考一下
在这个问题中,我们得到了一个整数数组和一个整数和,并且我们必须打印所有总和等于和值的整数对。
让我们以一个例子来理解这个问题:
输入: array = {1,6,-2,3} sum = 4
输出:(1,3),(6,-2)
在这里,我们需要具有给定总和值的对。
解决该问题的简单方法是检查生成和的元素对。这可以通过遍历数组并在数组中找到总和为总和的数字来完成。
该程序将说明解决方案:
示例
#include <iostream> using namespace std; int printPairsWithSum(int arr[], int n, int sum){ int count = 0; for (int i = 0; i < n; i++) for (int j = i + 1; j < n; j++) if (arr[i] + arr[j] == sum) cout<<"[ "<<arr[i]<<", "<<arr[j]<<" ]\n"; } int main(){ int arr[] = {1, 6, -2, 3}; int n = 4; int sum = 4; cout<<"Pairs with Sum "<<sum<<" are :\n"; printPairsWithSum(arr, n, sum); return 0; }
输出结果
Pairs with Sum 4 are : [ 1, 3 ] [ 6, -2 ]
此方法易于理解,但效率不高。另一种方法是使用哈希。
我们将初始化一个哈希表,遍历该数组并在其中找到对。匹配时,我们将打印数组:
以下程序将使您更好地理解算法:
示例
#include <bits/stdc++.h> using namespace std; void printPairsWithSum(int arr[], int n, int sum){ unordered_map<int, int> pair; for (int i = 0; i < n; i++) { int rem = sum - arr[i]; if (pair.find(rem) != pair.end()) { int count = pair[rem]; for (int j = 0; j < count; j++) cout<<"["<<rem<<", "<<arr[i]<<" ]\n"; } pair[arr[i]]++; } } int main(){ int arr[] = {1, 6, -2, 3}; int n = 4; int sum = 4; cout<<"The pair with sum is \n"; printPairsWithSum(arr, n, sum); return 0; }
输出结果
Pairs with Sum 4 are : [ 1, 3 ] [ 6, -2 ]