Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Στη c/c++ πως μπορώ κάθε φορά με την rand να δημιουργώ διαφορετικούς τυχαίους, δηλαδή σε ένα range ας πούμε 1-10 αν βγει το 5 μια φορά να μη ξαναβγεί? ποια είναι η λογική?

Δημοσ.

Γράφεις κάπου στην αρχή της main() ...

 

>srand( time(NULL) );

και ...

 

>
#include <stdlib.h>
#include <time.h>

στην αρχή του προγράμματος.

 

Το να κρατάς μονάχα μια εμφάνιση του κάθε νούμερου θα πρέπει να το εξασφαλίσεις εσύ κατόπιν, προγραμματιστικά.

Δημοσ.

Τελικά το έκανα με έναν static πίνακα που κρατάω τους αριθμούς που βγήκαν τους συγκρίνω και βγάζω το τελικό..

Δημοσ.

Τελικά το έκανα με έναν static πίνακα που κρατάω τους αριθμούς που βγήκαν τους συγκρίνω και βγάζω το τελικό..

 

Αυτό το ερώτημα που έχεις είναι σούπερ κλασικό και πολύ δυσκολότερο να απαντηθεί σωστά απ' ο,τι φαίνεται εκ πρώτης όψεως.

 

Πρώτα απ' όλα, "τυχαία" και "μη επαναλαμβανόμενα" στην ίδια πρόταση δεν έχει νόημα. Καταλαβαίνω βέβαια τι θέλεις να πεις, αλλά α) δεν υπάρχει πρακτικός τρόπος να δημιουργήσεις μια απείρου μήκους ακολουθία τυχαίων αριθμών που δεν επαναλαμβάνονται και β) δεν υπάρχει και περίπτωση να χρειάζεται να κάνεις κάτι τέτοιο.

 

Πολύ πιθανότερο είναι να θέλεις να δημιουργήσεις μια τυχαία μετάθεση ενός συνόλου προκαθορισμένων αριθμών (π.χ. 1-10 που ανέφερες και συ). Στην περίπτωση αυτή η λύση είναι μία, η εξής:

 

  1. Δημιουργείς μια ακολουθία από τους αριθμούς που σε ενδιαφέρουν (π.χ. int num[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  2. Fischer-Yates shuffle στην ακολουθία (μη δοκιμάσεις να γράψεις τον αλγόριθμο μόνος σου, θα κάνεις λάθος -- ορίστε έτοιμος κώδικας)
  3. Διαβάζεις τους αριθμούς που έχουν ανακατευτεί με τη σειρά, που τώρα πια είναι τυχαία

Δημοσ.

Τελικά το έκανα με έναν static πίνακα που κρατάω τους αριθμούς που βγήκαν τους συγκρίνω και βγάζω το τελικό..

Οι λύσεις που πρότειναν τα παιδιά παραπάνω είναι πολύ πιο compact και κυρίως πολύ πιο efficient. Αν δεν σε ενδιαφέρει η κατανομή των ψευδοτυχαίων δεν είναι καθόλου δύσκολο να φτιάξεις μια δικιά σου shuffle() συνάρτηση σε C.

 

Εδώ: http://codegolf.stac...com/a/3314/2265 είχα γράψει παλιότερα golfed κώδικα που ανακατεύει τα ενδιάμεσα γράμματα μιας οποιασδήποτε λέξης, κρατώντας σταθερά το 1ο και το τελευταίο. Εσύ δεν χρειάζεσαι καν αυτόν τον περιορισμό (από κάτω τον δείχνω και ungolfed).

 

Εφόσον όμως χρησιμοποιείς C++ έχεις έτοιμη συνάρτηση shuffle() όπως δείχνει κι ο κώδικας του παπι παραπάνω.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...