用 C++ 列印具有給定和的所有對


在這個問題中,我們得到一個整數陣列和一個整數和,我們必須列印所有整數對,其和等於和值。

讓我們舉一個例子來理解這個問題

輸入 - 陣列 = {1, 6, -2, 3} 和 = 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 ]

更新於: 2020年7月14日

365 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.