Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Generazione di combinazione senza valori presenti più volte (senza presenze multiple...)
Forum - C/C++ - Generazione di combinazione senza valori presenti più volte (senza presenze multiple...)

Avatar
tommyprojects (Normal User)
Rookie


Messaggi: 29
Iscritto: 26/07/2009

Segnala al moderatore
Postato alle 19:15
Sabato, 15/08/2009
Per adesso sono riuscito a generare TOT combinazioni nel range stabilito ma senza questo importantissimo controllo... sulle eventuali presenze multiple...


Qualcuno/a mi può suggerire come fare? Grazie

Codice sorgente - presumibilmente Delphi

  1. finale=fine-(inizio+1);
  2.  
  3.   string combinazioneintera;
  4.  
  5.   if (numeri!=0) {  
  6.          
  7.           cout << "\n";
  8.           cout << "Numeri:";
  9.           cout << "\n\n";
  10.           for (k=0;k<combinazioni;k++) {
  11.          
  12.           for (z=0;z<numeri;z++) {
  13.          
  14.           numero = rand() % finale  + inizio;
  15.  
  16.           cout << numero << ",";
  17.           //cout << "\n";
  18.          
  19.           string numero3;
  20.           numero3 = intToString(numero);
  21.          
  22.           combinazioneintera+=numero3;
  23.           combinazioneintera+=",";  
  24.                    
  25.          
  26.           }



Ora come ora le combinazioni generate possono essere qualcosa di questo tipo...
1,34,1,78,45,90,35,1,32,67  il carattere 1 è stato generato per 3 volte...
mentre la stessa comb dopo la modifica richiesta dovrebbe diventare:
34,1,2,78,45,90,35,11,33,67 ovvero avere tutti e 10 i valori diversi...


Grazie anticipate! :k:

Ultima modifica effettuata da tommyprojects il 15/08/2009 alle 19:17


Vero sapiente è colui che sa di non sapere [Socrate]
PM Quote
Avatar
manvb.net (Member)
Guru


Messaggi: 663
Iscritto: 28/01/2008

Segnala al moderatore
Postato alle 22:24
Sabato, 15/08/2009
Crea un array di bool(inizializzato a false) e quando esce un numero setti a true l'elemento che ha l'inidice num. Cosi, ad ogni estrazione del numero, controlli che il corrispondente elemento non sia true.

Una cosa del genere:
bcontrollo[numero] = true;


E nella verifica:
if (bcontrollo[numero]==ture){
return 0; //Esci, in qualsiasi modo.
}


"E' facile distruggere, la vera sfida è creare!"(cit. me)

"Ricordati chi sei, non permettere a nessuno di cambiarti, non perdere mai te stesso. Farai grandi cose nella vita."(cit. me)

double penetration; //ouch
PM Quote
Avatar
tommyprojects (Normal User)
Rookie


Messaggi: 29
Iscritto: 26/07/2009

Segnala al moderatore
Postato alle 10:43
Domenica, 16/08/2009
Per adesso sono arrivato fin qui...

Codice sorgente - presumibilmente C/C++

  1. numero = rand() % finale  + inizio;
  2.          
  3. //prova controllo x evitare ripetizioni...
  4.            
  5. //AGGIUNTA A VECTOR combinazione... del primo elemento sicurmante non doppione
  6. combinazione.push_back(numero);
  7. //----------------------------------
  8.            
  9. cout << "\nNUMERO GENERATO TEMPORANEO: ";
  10. cout << numero;
  11.            
  12. //SE IL NUMERO GENERATO E' GIA' PRESENTE IN VECTOR combinazione NON VA INSERITO...
  13.  
  14. //Ma per quanto riguarda questo pezzo... non riesco ad ottenere il controllo
  15. //desiderato... ho provato con il tuo consiglio... ho provato con if...
  16. //(numero==combinazione[i]) allora non inserire... ecc... ma nulla... :(          
  17.            
  18. //--------------------------------------------------------------------------------
  19.            
  20. cout << "\nPress ENTER to continue...\n" << endl;
  21. cin.get();
  22.            
  23. cout << "CONTENUTO COMBINAZIONE TEMPORANEO:\n ";
  24. for (i=0;i<combinazione.size();i++) {
  25. cout << combinazione[i];
  26. cout << "-";
  27. }
  28.            
  29. cout << "\nPress ENTER to continue...\n" << endl;
  30. cin.get();



Grazie

Ultima modifica effettuata da tommyprojects il 16/08/2009 alle 10:46


Vero sapiente è colui che sa di non sapere [Socrate]
PM Quote
Avatar
manvb.net (Member)
Guru


Messaggi: 663
Iscritto: 28/01/2008

Segnala al moderatore
Postato alle 14:04
Domenica, 16/08/2009
Ovvio che non funzioni, non puoi usare un vector con push_back perchè così aggiungi un valore, ma non all'indice desiderato. Ti conviene usare un array dinamico di boolean e il numero estratto come indice, come ti ho consigliato prima.


"E' facile distruggere, la vera sfida è creare!"(cit. me)

"Ricordati chi sei, non permettere a nessuno di cambiarti, non perdere mai te stesso. Farai grandi cose nella vita."(cit. me)

double penetration; //ouch
PM Quote
Avatar
tommyprojects (Normal User)
Rookie


Messaggi: 29
Iscritto: 26/07/2009

Segnala al moderatore
Postato alle 18:34
Domenica, 16/08/2009
Testo quotato

Postato originariamente da manvb.net:

Ovvio che non funzioni, non puoi usare un vector con push_back perchè così aggiungi un valore, ma non all'indice desiderato. Ti conviene usare un array dinamico di boolean e il numero estratto come indice, come ti ho consigliato prima.



Mi potresti postare il codice relativo a questo tuo tipo di controllo applicato che so ad una generazione di una combinazione di 10 numeri casuali tutti univoci? Perchè ho provato e riprovato a metterlo nel mio cod realizzato finora ma nulla... :noway:

tnx


Vero sapiente è colui che sa di non sapere [Socrate]
PM Quote