Dice (Normal User)
Expert
Messaggi: 238
Iscritto: 26/11/2011
|
ho un problema:
io ho un array di 5 elementi e devo contare quanti elementi uguali ci sono (ad esempio se ci sono 3 quattro; oppure 3 cinque, ecc...).
Come devo fare?
|
|
TheDarkJuster (Member)
Guru^2
Messaggi: 1620
Iscritto: 27/09/2013
|
Codice sorgente - presumibilmente C++ |
int array[5] = { ......... }; int s = 0; int diversi = 0; int *duplicati; int *numeroDuplicati; for (int i = 0; i < 5; i++) { bool trovato = false; for (int j = 0; j < 5; j++) if ((array[i] == array[j]) && (i != j)) trovato = true; if (!trovato) diversi++; }
|
così trovi i diversi fra loro........
Codice sorgente - presumibilmente C++ |
duplicati = (int*)malloc(5 - diversi); numeroDuplicati = (int*)malloc(5 - diversi); for (int i = 0; i < 5; i++) { bool presente = false; for (int j = 0; j < 5- diversi; j++) if (array[i] == duplicati[j]) presente = true; if (!presente) { bool trovato = false; for (int j = 0; j < 5; j++) if ((array[i] == array[j]) && (i != j)) trovato = true; duplicati[s++] = array[i]; } }
|
ora, se non ho sbagliato, hai:
array che non è cambiato; diversi con il numero di numeri diversi fra loro nell' array, duplicati che è grande 5 - diversi e che in ogni "elemento" ha un numero doppio in array (il numero non è duplicato) e numeroDuplicati che è da riempire...... Io lo riempirei così: duplicati[X] ha il valore di un numero duplicato in array, numeroDuplicati[X] ha il numero di volte in cui duplicati[X] è ripetuto nell' array. Hai capito?
dove vedi = (int*)malloc..... cambia con = new int[5-diversi] e togli int *duplicati e lascia int[] duplicati; Ultima modifica effettuata da TheDarkJuster il 04/01/2014 alle 21:03 |
|
nessuno (Normal User)
Guru^2
Messaggi: 6379
Iscritto: 03/01/2010
|
La domanda mi sembra per il C# e la risposta per C/C++ ...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
Dice (Normal User)
Expert
Messaggi: 238
Iscritto: 26/11/2011
|
in effetti si, io devo fare questo lavoro in C#, non in C/C++.
Come posso risolvere in modo semplice senza scrivere mille righe di codice?
|
|
TheDarkJuster (Member)
Guru^2
Messaggi: 1620
Iscritto: 27/09/2013
|
Purtroppo mi sono accorto troppo tardi, va beh, ma è uguale, solo che invece di int * metti int[] e dove vedi (int*)malloc(5-diversi) metti new int[5 - diversi]
Il resto non cambia
|
|
Dice (Normal User)
Expert
Messaggi: 238
Iscritto: 26/11/2011
|
forse sono stupido io, ma... ti posso chiedere il grande favore di riscrivermi soltanto la parte che mi serve per verificare quanti numeri uguali ci sono?
|
|
TheDarkJuster (Member)
Guru^2
Messaggi: 1620
Iscritto: 27/09/2013
|
Eh no, adesso esageriamo. Non solo tu prima mi hai chiesto la pappa pronta e io, forse un pò troppo buono te la ho anche data, ma adesso, non avendo capito cambi la domanda e vuoi altro codice. Sarò io cattivo ma non credo che scrivere le cose al posto tuo sia una grande idea. Se tu specifichi BENE cosa vuoi (nota bene che la domanda e ciò che mi hai chiesto ora sono due cose diverse) ti posso anche dire l' algoritmo per arrivare alla soluzione, oppure ti arrangi......
|
|
Dice (Normal User)
Expert
Messaggi: 238
Iscritto: 26/11/2011
|
Allora, cosa importantissima: chiedo un super scusa se sono stato scorretto, non volevo creare problemi
E' sicuramente colpa mia che non mi sono spiegato bene; chiedo ancora scusa
Adesso ripongo la domanda (sperando di non creare ulteriore confusione):
avete presente il poker, dove come "tipo di punteggio" c'è il TRIS? ecco, io devo fare una cosa praticamente uguale: sto cercando di ricreare il gioco di dadi YAHTZEE, dove come punteggio c'è anche "TRE DADI UGUALI".
Io ho fatto così: ho preso i 5 risultati casuali (bisogna lanciare 5 dadi) e gli ho memorizzati in un array.
Io devo verificare se tra questi 5 numeri casuali (da 1 a 6) ce ne sono 3 uguali.
Ecco il mio problema.
Spero di essere stato il più chiaro possibile. E scusatemi per tutti i fraintendimenti
|
|
tuttodiMC (Normal User)
Expert
Messaggi: 327
Iscritto: 29/10/2012
|
Facile. Cicli l'array sei volte cercando ogni volta un numero diverso. Ogni volta che trovi lo stesso numero incrementi una variabile. Esempio
Codice sorgente - presumibilmente C# |
private static void Main (string[] argv) { int ripetizioni, n; for (int i = 1; i <= 6; i++) { ripetizioni = 0; foreach (int risultato in risultatiDadi) { if (risultato == i) { ripetizioni++; } } if (ripetizioni == 3) { n = i; break; } Console.WriteLine("Il numero {0} compare 3 volte", n); }
|
Se però vuoi fare l'ingegnere (o l'informatico, non so che indirizzo fai all'università) queste cose dovresti saperle fare a prima vista (senza offesa). Più continui a chiedere qui e meno saprai creare algoritmi (e dovrai saperlo fare se vuoi veramente progettare software o programmarli tu stesso). ATTENZIONE! Un conto è non saper risolvere un algoritmo, un altro è invece chiedere come funziona una libreria o un namespace di .NET. Buono studio.
Ultima modifica effettuata da tuttodiMC il 05/01/2014 alle 18:45 |
|