用 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 ]
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP