Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

In các cặp tổng xuất hiện nhiều nhất trong mảng C++


Cho mảng n số nguyên duy nhất. Tìm tổng của 2 số xuất hiện nhiều nhất (có thể nhiều tổng).

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

Giải thích: Tổng 16 (5+11, 7+9) và 12 (1+11, 5+7) đều xuất hiện 2 lần.

Giải pháp: Duyệt mọi cặp, dùng unordered_map đếm tần suất tổng. In các tổng có tần suất max.

Chương trình minh họa

#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 << "Các cặp tổng xuất hiện nhiều nhất:\n";
    sumPairs(a, n);
    return 0;
}

Kết quả

16 12