C++ :: Aufgabe #325

1 Lösung Lösung öffentlich

Gleichwertige Zahlenpaare zählen/auflisten

Anfänger - C++ von JKooP - 09.01.2021 um 16:17 Uhr
Erstelle eine Methode/Funktion, mit der es möglich ist, aus einem beliebig großen Array/Liste
die Anzahl aller gleichwertigen Zahlenpaare auszugeben.
Wer möchte, kann natürlich die Zahlenpaare bzw. Indizes zusätzlich mit ausgeben.

Beispiele:

[1, 2, 3, 1, 1, 3] => 4 gleiche Zahlenpaare
mit den Indizes: (0, 3), (0, 4), (3, 4), (2, 5)
und den Lösungen: (1, 1), (1, 1), (1, 1), (3, 3)

[1, 1, 1, 1] => 6 gleiche Zahlenpaare
mit den Indizes: (0, 1), (0, 2), (0, 3), (1, 2), (1, 3), (2, 3)
und den Lösungen: (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1)

[1, 2, 3, 4] => 0 gleiche Zahlenpaare

Hier gibt es verschiedene Herangehensweisen:

Lösung 1 (einfach): Verschachteln mehrerer Schleifen
Lösung 2 (schwieriger): nur eine Schleife

Vielleicht kann man es sogar mittels Fakultät und Binomialkoeffizient berechnen?!
Ich habe dafür ad hoc auch noch keine Lösung. Es gibt hier bestimmt die eine oder andere gute Idee.

Viel Spaß

Lösungen:

vote_ok
von JKooP (18090 Punkte) - 23.04.2021 um 20:15 Uhr
C++ 17
Quellcode ausblenden C-Code
#include <iostream>
#include <vector>
#include <map>
using namespace std;

int identical_pais(vector<int> n)
{
    map<int, int> m;
    auto c{ 0 };

    for (const auto& i : n)
    {
        if (m.count(i) == 0)
            m.insert({ i, 1 });
        else
            c += m[i]++;
    }
    return c;
}

int main()
{
    vector<int> v{ 1, 2, 3, 1, 1, 3 };
    cout << "Identische Paare: " << identical_pais(v);
}
1801166

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.