Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

09.08.2009, 22:55

int array auf vollständigkeit prüfen

hallo. ich steh seit ein paar tagen vor einem problem auf das ich alleine nicht komme...

ich habe insgesammt 12 zahlen, von denen 7 per zufall in ein array kommen.

ich will jetzt diese zahlen sortieren, was mit sort() ja kein problem ist, soweit bin ich mal. aber wie kann ich jetzt festellen ob die zahlen zusammen hängen? ich meine, 1,2,3,4,5

und wenn ich 1,2,4,5,6 hab dann soll das als nicht zusamenhängend erkannt werden.

ich habe keine wirklich gute idee dazu. was mir eingefallen ist is eine liste mit vergleichsarrays, dann schau ich nach was die erste(niedrigste) zahl is und nimm mir das passende vergleichsarray her. dann vergleich ich die beiden und tata...

gibts da nicht was effizienteres. oder einfacheres weil meine lösung hört sich nach mächtig viel spaghetti code an...

lg Aly

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

09.08.2009, 23:05

Du fängst beim ersten Eintrag ein und prüfst, für jeden folgenden Eintrag, ob der Wert gleich f(n-1)+1 ist.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

3

09.08.2009, 23:08

Zitat

ich habe insgesammt 12 zahlen, von denen 7 per zufall in ein array kommen.

Also das verstehe ich ja schon mal gar nicht.. Wie soll das gehen? - Eine Zahl hat ja für gewöhnlich z.B den Typen int, und das kann ja schliesslich kein Array sein.. :roll:

Das andere kannst du ja doch mit einer einfachen Funktion überprüfen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
bool check ( std::vector< int > numbers ) // std::vector für dyn. Arrays

{
  int lastnumber = 0;
  for ( int i = 0; i < numbers.size(); ++i)
  {
    if ( !i )  //edit: schaut euch das mal im Editmodus an.. :p

    {
      lastnumber = numbers[ i ];
    }
    else
    {
      if ( lastnumber + 1 != numbers [ i ] )
        return false;
      else
        lastnumber = numbers[ i ];
    }
  }

  return true;
}


So in etwa sollte das gehen. Testen musst du es noch, habe es nicht überprüft.. ;)

Davids Post verführt einen fast da eine rekursive Lösung zu implementieren. :)

4

09.08.2009, 23:12

ok super leute, danke für die denkanstösse. das mit dem int und array was so gmeint:
12 zaheln und 7 davon werden ausgewählt, und ich mach mir mit diesen 7 dann ein array wo die nach der reihe drin sind.

ok danke nochmal

lg Aly

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

5

09.08.2009, 23:14

Ah. Verstehe.
Aber wenn du dieses Array dann erzeugst, warum brauchst du dann eine Überprüfung? - Du kannst das Array ja bereits richtig anlegen..

6

09.08.2009, 23:22

mh ich kenn zwar die zufallszahlen und will weiß noch nicht ob sie zusammenhängen . daher muss ichs ja noch irgendwie überprüfen...
ich sag dir um was es geht dann is es vl leichter zu verstehen: ich schreib an einem poker und will auf eine straight überprüfen...

danke für deine lösung übrigens. habs umgesetzt und geht schon. danke noch mal.

lg Aly

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

10.08.2009, 00:20

Du kannst alternativ auch prüfen ob die Differenz zweier aufeinaderfolgender Zahlen im Array gleich 1 ist...

C-/C++-Quelltext

1
2
3
4
5
6
7
bool check(const std::vector<int>& numbers)
{
  for (int i = 1; i < numbers.size(); ++i)
    if (numbers[i] - numbers[i - 1] != 1)
      return false;
  return true;
}

9

10.08.2009, 00:34

mh wär natürlich auch gegangen. aber jetzt is es eh schon ausimplementiert. ich komm mir wirklich verdammt schlechtg vor weil ich nicht selber auf an anständigen alghorithmus kommen bin. war ja wirklich nicht sooo schwer.
es geht bergab...

naja danke jedenfalls no mal für die schnellen antworten.


so so schaut der code jetzt aus (is mal ein prototyp, den i dann no ins spiel einihackn muss)...

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <algorithm>
#include <vector>


int main()
{
  int array[] = {1,2,3,9,5,6,7};
  std::vector<int> myvector (array, array+7); //der int der addiert wird muss die anzal der vector elemente sein               


  std::sort (myvector.begin(), myvector.end());
 
  int counter = 0;
  bool not_found = false;
  for (int i = 0; i <= 7; i++)
    {
      if (i !=0)
         {
          if(myvector[i] == (myvector[i-1]+1)) 
             {
              counter++; 
             }

          else
             {
               if (counter < 4)
                 {
                    not_found = true; 
                 }
             } 
         }

      else if(i == 0) counter = 0; //erstes element

    }
   if (counter >= 4 && not_found == false) std::cout << "straight" << std::endl;
   else std::cout << "no straight" << std::endl;
   


  return 0;
}


lg Aly

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

10

10.08.2009, 02:02

Nicht deprimiert sein, dass man einfach mal auf dem Schlauch steht passiert jedem einmal. Dann will eine Lösung die sonst immer so einfach und logisch erscheint einem einfach nicht mehr einfallen und man überlegt und überlegt obwohl es eigentlich nur was ganz grundlegendes ist.

Socke

Werbeanzeige