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

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

Δημοσ. (επεξεργασμένο)

πως μπορουμε να φτιαξουμε την rand() ωστε  να γεμιζουμε ενα πινακα πχ 100 θεσεων ,με τιμες αναμεσα στο πχ0 και 99 δλδ rand()%99 ,αλλα αυτοι οι αριθμοι να εξυπηρετουν μια συνθηκη...στην προκειμενη να απεχουν ανα 4.
 


και επισης αυτοι οι αριθμοι να μην ειναι ιδιοι...ευχαριστωωω!!!

Επεξ/σία από christodoulos
Δημοσ.

οταν λες να απεχουν ανα 4??  δηλ. εννοεις να περνεις σαν αποτελεσμα κατι τετοιο: ?

pinakas[0]=0

pinakas[1]=4

pinakas[2]=8

pinakas[3]=12

pinakas[4]=16

klp

klp

Δημοσ.

πως μπορουμε να φτιαξουμε την rand() ωστε  να γεμιζουμε ενα πινακα πχ 10 θεσεων ,με τιμες αναμεσα στο πχ0 και 99 δλδ rand()%99 ,αλλα αυτοι οι αριθμοι να εξυπηρετουν μια συνθηκη...στην προκειμενη να απεχουν ανα 4.

 

και επισης αυτοι οι αριθμοι να μην ειναι ιδιοι...ευχαριστωωω!!!

 

Όσο η διαφορά απο το αποτέλεσμα που επιστρέφει η rand μεσα στα ορια που την έχεις βάλει με το στοιχειο i-1 του πίνακα δεν ειναι 4 συνέχιζε να καλείς την συνάρτηση μέχρι να πετύχεις αυτο που θές. Στο στοιχειο [0] θα βάλεις μια τιμή μεσω της rand μετά το i θα αυξηθεί σε 1. Αν το [i-1] - rand()%99 != 4 δηλαδη το [0] - rand()%99 != 4 συνέχισε (χωρις να αυξήσεις το i) και ξανακάλεσε την rand. Καπως έτσι το σκέφτομαι εγω τώρα. Μπορει να υπάρχει και καλύτερος τρόπος.

 

Πρεπει να προσέξεις βεβαια μην σου βγει και αρνητικός αριθμός.

Δημοσ.

αν το θες ετσι οπως καταλαβα εγω...γιατι να μην παρεις στην αρχη εναν τυχαιο αριθμο, να τον βαλεις στην πρωτη θεση κ οι υπολοιπες θα περνουν τον προηγουμενο αριθμο θα τον αυξανουν κατα 4 και θα τον περναν στον πινακα

  • Like 1
Δημοσ. (επεξεργασμένο)

Παρε ενα τυχαιο μεταξυ [0,99] π.χ. 75. 

Το ευρύτερο διαστημα σου θα ειναι [75-9*4 , 75 + 6*4]

εχεις 7 "σειρες" που περιεχουν το 75

[75-9*4, 75]

[75-8*4, 75 +4]

[75-7*4, 75 +2*4]

[75-6*4, 75 +3*4]

[75-5*4, 75 +4*4]

[75-4*4, 75 +5*4]

[75-3*4, 75 +6*4]

 

Παρε ενα τυχαιο μεταξυ [1, 7] και κρατα αυτη τη σειρά

Επεξ/σία από albNik
Δημοσ. (επεξεργασμένο)

δεν το εξεφρασα σωστα και ζηταω συγνωμη...ηθελα να πω η διαφορα του πρωτου τυχαιου αριθμου με τον δευτερο να ειναι ΤΟΥΛΑΧΙΣΤΟΝ 4..δηλαδη αν ο πρωτος τυχαιος αριθμος ειναι ο 44 ο επομενος να ειναι απο 48 και πανω η απο 40 και κατω..
ευχαριστω πολυ ..θα εξετασω τωρα καποιες απαντησεις σας να δω και εγω πως μπορω να τiς αξιοποιησω!

Επεξ/σία από christodoulos
Δημοσ.

Εχεις ενα πινακα 100 θεσεων όλα 0.

 

Κανε rand(), βαλε 1 στη θεση του και -1 στις θεσεις +-1,2,3.

 

Κανε rand() μεχρι να πεσει σε θεση με 0, βαλε 1 εκει, και -1 στις θεσεις +-1,2,3. 

Κανε rand() μεχρι να πεσει σε θεση με 0, βαλε 1 εκει, και -1 στις θεσεις +-1,2,3. 

...

Καντο 9 φορες.

 

Οι 10 αριθμοι που ειναι σε θεσεις 1 απεχουν >=4.

Δημοσ.

Αυτός ο τρόπος είναι τέρμα χωριάτικο αλλά πρέπει να είναι σωστό... είναι σε php

$pin = array();
for($i = 0; $i<=9; $i++){

     $x = rand(10,100);

     if($i > 0){
        while($x==$pin[$i-1]) ||
            ($x==($pin[$i-1] + 1))  || ($x==($pin[$i-1] + 2))  ||
            ($x==($pin[$i-1] + 3)) || ($x==($pin[$i-1] + 4))  ||
            ($x==($pin[$i-1] - 1)) || ($x==($pin[$i-1] - 2))  ||
            ($x==($pin[$i-1] -3)) || ($x==($pin[$i-1] - 4)){
                $x = rand(10,100);
            }
        }
    $pin[$i] = $x;
}
Δημοσ.
int ar[100];
for(i=0;i<100;i++)
 ar[i]=0;

int r=rand()%100;
ar[r]=1;
for(i=1;i<3;i++)
{
  if(r+i<100)
    ar[r+i]=-1;
  if(r-i>=0)
    ar[r-i]=-1;
 }

for(k=1;k<=9;k++)
{
  while(ar[r=rand()%100]!=0)
     ;
   
  ar[r]=1;
 
   for(i=1;i<3;i++)
  {
  if(r+i<100)
    ar[r+i]=-1;
  if(r-i>=0)
    ar[r-i]=-1;
 }
   
}




Απο τον editor του  φορουμ το εγραψα ..

Δημοσ.

@παπί

 

Είναι πολύ επικίνδυνο να περνάς rand() ως συνάρτηση σύγκρισης σε κάποιο sort για το οποίο δεν ξέρεις όλες τις λεπτομέρειες, μπορεί να γίνουν διάφορα περίεργα (π.χ. infinite loop). Αυτό δεν είναι πρόβλημα στην ίδια την quicksort αλλά είναι κακό σαν παράδειγμα και επιπλέον technically δεν ξέρεις αν η qsort κάνει quicksort. Η ενδεδειγμένη προσέγγιση όταν θες να κάνεις κάτι τέτοιο τόσο για πρακτικούς όσο και για διδακτικούς σκοπούς είναι Fisher-Yates.

 

Για το πρόβλημα, νομίζω πως "σωστότερη" λύση είναι η εξής

  • Βάλε ένα τυχαίο αριθμό στην πρώτη θέση.
  • Σε κάθε επόμενη θέση, δες βάσει της προηγούμενης και του επιθυμητού margin πόσες επιλογές είναι ακατάλληλες. Π.χ. με margin 4 και προηγούμενη 40 έχουμε 7 ακατάλληλες, τις [37, 43] ενώ με προηγούμενη 2 έχουμε μόνο 6, τις [0, 5]. Έστω L το κάτω φράγμα του διαστήματος των ακατάλληλων (το 37 και το 0 παραπάνω) και Ν ο αριθμός των στοιχείων του (7 και 6 παραπάνω).
  • Ο επόμενος τυχαίος αριθμός είναι R = rand() % (99 - N), εκτός αν R >= L οπότε επιπλέον R += Ν.

Πλεονέκτημα: μαθηματικά βέβαιο πως θα τερματίσει μετά από ακριβώς τόσες επαναλήψεις όσες τυχαίους αριθμούς θέλουμε.

  • Like 1
Δημοσ.

σε ποιον μπορω να στειλω το προγραμμα που εχω φτιαξει ωστε να καταλαβει πρακτικα που χρειαζομαι αυτην την παραμετρο...ευχαριστω πολυ ολους με εχουν βοηθησει αρκετα καποιες ιδεες!

Δημοσ.

σε ποιον μπορω να στειλω το προγραμμα που εχω φτιαξει ωστε να καταλαβει πρακτικα που χρειαζομαι αυτην την παραμετρο...ευχαριστω πολυ ολους με εχουν βοηθησει αρκετα καποιες ιδεες!

 

Βάλτο εδώ. Για να πάρεις και περισσότερες απαντήσεις.

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

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

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

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

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

Σύνδεση

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

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