Arrays (Felder) - Dopplungen von Zahlen ausgeben



  • Aloha,

    neu und unwissend komme ich mit folgendem Quelltext nicht zurecht:

    int main(){

    int feld[10]={5,5,6,7,5,9,4,2,2,7};

    bool marker[10]; // Was genau sagt dieser Marker aus????

    for (int i=0; i<10; i++){
    marker[i]=true;
    }

    for (int i=0; i<10; i++){
    if (marker[i]==true){
    int n=1;

        for (int j= i+1; j<10; j++){   // Diese Schleife verstehe ich vom Verständnis her nicht ?!
            if (feld[i]==feld[j]){
                n++;
                marker[j]=false;
            }
        }
    
        if (n>1){
            cout << n << "mal " << feld[i] << endl;
        }
    

    }

    Ein kurzes Programm um die im Array gegebenen Zahlen zu prüfen, ob und wie oft welche doppelt vorliegen. Für mich geht es rein ums Verständnis, was der Marker macht und wie man ihn korrekt einsetzt und warum die Variable j eingeführt wurde?

    Danke im Voraus!



  • Formatierte bitte den Quelltext richtig.



  • Der Marker ist dafür, dass du Dopplungen nicht mehrfach ausgibst. Du willst oben ja nur 1x ausgeben, dass die 5 3-fach vorkommt. Wäre der Marker nicht da, würdest du 3x5, 2x5 und 1x5 ausgeben.

    Du läufst alle Zahlen durch und schaust dann, wie viele der folgenden Zahlen identisch zur aktuellen sind. Diese werden als "gesehen" gemarkert, sodass du sie später überspringen kannst.

    Übrigens benötigt dieser Algorithmus im ungünstigsten Fall O(n2)\mathcal O(n^2) Schritte - für große Arrays mit größtenteils unterschiedlichen Werten würde ich dir einen anderen Algorithmus anraten.



  • @wob Besten Dank für die schnelle Antwort und Erläuterung! Alle Unklarheiten beseitigt und die Funktion von dem Marker verstanden.


Log in to reply