C# :: Aufgabe #352 :: Lösung #2

2 Lösungen Lösungen öffentlich
#352

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ß
#2
vote_ok
von JKooP (18090 Punkte) - 23.04.2021 um 19:33 Uhr
NET 5.x; C# 9.x; VS-2019
Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;

var a = new int[] { 1, 2, 3, 1, 1, 3 };
Console.WriteLine($"Identische Paare für [{string.Join(", ",a)}]: {IdenticalPairs(a)}");

static int IdenticalPairs(int[] n)
{
    var d = new Dictionary<int, int>();
    var c = 0;

    foreach (var i in n)
    {
        if (!d.ContainsKey(i))
            d.Add(i, 1);
        else
            c += d[i]++;
    }
    return c;
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben