Array Werte innerhalb des Arrays vergleichen und bei Unterschied hochzählen



  • Hm ...

    also es handelt sich zwar immer noch um die Aufgabe, aber um ein neues Problem und deswegen mal ein nues Topic in der Hoffnung es ist besser für die Suchmaschine bzw Leute mit einem ähnlichen Problem.

    kann mir zufällig jemand sagen, wie ich den Inhalt eines Arrays vergleichen kann um dann auszugeben, wieviele der Array Inhalte sich voneinander unterscheiden?

    also differentInRotation soll feststellen, wieviele unterschiedliche Zahlen im Array rotation enthalten sind und diesen Wert (also die Anzahl der unterschiedlichen Zahlen)
    zurückgeben.

    int Roulette::differentInRotation()
    {
    	int differentWinnersInRotation=0;
    	for (int i = 0; i<=36; i++)
    	{
    		if (rotation[i]==rotation[i])
    		{
    			differentWinnersInRotation=;
    		}
    	}
    
    	return differentWinnersInRotation;
    }
    

    Ergibt logischerweise ja null weil immer die gleiche zahl miteinander vergölöichen wird. Wenn ich nun an einer stelle einen festen array platz (also zb rotation[1]!=rotation[i]) vergleiichen lassen würde, würden zwar unterschiede erkannt, aber eben nur welche zahlen sich gegenüber dem 1 (bzw2) array Eintrag unterscheiden.

    Gibt es da ne elegante und einfach zu verstehenden Lösung?



  • unsigned int same (0);
    max = arr.length ();
    for (int i (0); i < max-1; ++i)
    {
      for (int j (i+1); j < max; ++j)
      {
        if (arr[i] == arr[j])
          same++;
      }
    }
    

    ok? ^^



  • Hm hallo,

    also ich habs mal umgestellt und es liefert eindeutig zuviele Werte, weil es wohl jede Zahl mit jeder Vergleicht und die zahl hochsetzt, sobald sie sich unterscheidet gell?

    Es soll aber eben nur auslesen, wiviele Zahlen sich innerhalb des Arrays unterscheiden, was im maximalfall 37 sein kann, wenn jedesmal ne andere zahl herausgekommen wäre bzw in jedem feld ein anderer wert steht.

    das Ergebnis müsste aber sein, das wenn bei 37 Felder an 6 stellen die gleiche Zahl steht, sich 31 zahlen unterscheiden.



  • int Roulette::differentInRotation()
    {
        vector<int> newRot(rotation, rotation+37);
        // vermutlich besser:
        // vector<int> newRot(37);
        // newRot.assign(rotation, rotation+37);
    
        sort(newRot.begin(),newRot.end());
    
        return newRot.size() - ( newRot.end() - unique(newRot.begin(),newRot.end()) );
    }
    


  • geht es auch irgendwie nur mit dem array?



  • ThaRealMatix schrieb:

    geht es auch irgendwie nur mit dem array?

    Müsste eigentlich genauso gehen.
    Als ".begin()/.end()" kannst Du einfach den Zeiger auf das erste (&arr[0] oder einfach arr) und hinter das letzte Element (&arr[size] oder arr+size).
    (Die Zahl der Elemente musst Du natürlich sowieso kennen ...)

    Gruß,

    Simon2.



  • ThaRealMatix schrieb:

    geht es auch irgendwie nur mit dem array?

    Ich habs nur in nen Vector gesteckt, da ich nicht wusste, ob du dein Array in der selben Ordnung behalten willst. Das ganze kannst du auch natürlich so machen:

    int Roulette::differentInRotation()
    {
        const int* end = rotation+37;
    
        sort(rotation, end);   
        return 37 - ( end - unique(rotation, end) );
    }
    

Anmelden zum Antworten