C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

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 ]

  1. 特定の文字列のすべてのサブ文字列をC++で出力するプログラム

    このチュートリアルでは、特定の文字列のすべての部分文字列を出力するプログラムについて説明します。 このために、文字列または文字の配列が提供されます。私たちのタスクは、その特定の文字列のすべてのサブ文字列を出力することです。 例 #include<bits/stdc++.h> using namespace std; //printing all the substrings void print_substr(char str[], int n){    for (int len = 1; len <= n; len++){    

  2. C++で指定された範囲のすべての回文を印刷するプログラム

    このチュートリアルでは、特定の範囲内のすべての回文を印刷するプログラムについて説明します。 このために、回文が見つかる数学的範囲が与えられます。私たちの仕事は、その範囲内のすべての回文を見つけて、それを印刷することです。 例 #include<iostream> using namespace std; //checking if the number is a palindrome int is_palin(int n){    int rev = 0;    for (int i = n; i > 0; i /= 10) &nbs