Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 최대 횟수로 발생하는 모든 합 쌍을 인쇄하십시오.


이 문제에서는 n개의 고유 정수 배열이 제공됩니다. 그리고 최대 주파수를 갖는 배열의 두 정수의 합을 찾아야 합니다. 문제에는 여러 솔루션이 있으며 모두 찾아야 합니다.

Input : array = { 1, 12, 5, 7, 9, 11}
Output : 16 12

설명 - 합 16과 12는 두 번 발생합니다.

5 + 11 = 16 & 7 + 9 = 16
1 + 11 = 12 & 5 + 7 = 12

이제 이 문제를 해결하기 위해 문제에 대한 접근 방식은 모든 합 쌍의 발생을 확인한 다음 최대 횟수로 쌍을 인쇄하는 것입니다.

문제 해결 단계 -

Step 1: Iterate over all pairs.
Step 2: The occurrence of sum pairs is counted using hash-table.
Step 3: After the interation process is done, the sum pair with maximum occurrence is printed.

#include <bits/stdc++.h>
using namespace std;
void sumPairs(int a[], int n){
   unordered_map<int, int> pairSum;
   for (int i = 0; i < n - 1; i++) {
      for (int j = i + 1; j < n; j++) {
         pairSum[a[i] + a[j]]++;
      }
   }
   int occur = 0;
   for (auto it : pairSum) {
      if (it.second > occur) {
         occur = it.second;
      }
   }
   for (auto it : pairSum) {
      if (it.second == occur)
         cout << it.first <<"\t";
   }
}
int main(){
   int a[] = { 1, 12, 5, 7, 9, 11 };
   int n = sizeof(a) / sizeof(a[0]);
   cout<<"The sum pairs with max ccurence are : "<<endl;
   sumPairs(a, n);
   return 0;
}

출력

최대 발생이 있는 합계 쌍은 -

16 12