Αλγόριθμο σε C/c++

Συζητήσεις για την γλώσσα C και C++

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
billiaswhs
Δημοσιεύσεις: 346
Εγγραφή: 11 Νοέμ 2004 00:29
Επικοινωνία:

Αλγόριθμο σε C/c++

Δημοσίευση από billiaswhs » 09 Απρ 2005 18:28

Γεια σας ψάχνω ένα αλγοριθμο σε C/C++ που απο δέκα στοιχεία να μπορεί να βρίσκει όλες τις δυνατές εννιάδες, οκτάδες , εφτάδες , εξάδες κτλ. Μήπως έχει κανένας υπόψη?

Άβαταρ μέλους
softius
Script Master
Δημοσιεύσεις: 241
Εγγραφή: 11 Ιαν 2004 19:07
Επικοινωνία:

Αλγόριθμο σε C/c++

Δημοσίευση από softius » 09 Απρ 2005 21:04

Μάλλον πρέπει να κάνεις χρήση αναδρομής. Η ιδέα είναι ότι για k-αδα... θα παίρνεις μία-μία τις πιθανές τιμές για την πρώτη θέση και θα τις ενώνεις με μία πιθανή (k-1)-άδα, καλώντας αναδρομικά την ίδια συνάρτηση. Οπότε εκείνη με την σειρά της θα προχωρήσει για την (k-2)-άδα κοκ. Ο αλγόριθμος*:

Κώδικας: Επιλογή όλων

void example(int elements, int current, int size, int done, int total) {
  int i;
  
  if ( done == total ) {
    print_array(current);    //mia synarthsh pou typwnei to current 
  } else {  
    for &#40; i=0; i<size; i++ &#41; &#123;
      current&#91;done&#93; = elements&#91;i&#93;;
      example&#40;elements, current, size, done+1, total&#41;;
    &#125;
  &#125;
&#125;
* δεν είναι ακριβώς C - οπότε διορθώνεις μερικά πράγματα - συγχώρα με... πάει καιρός να γράψω C

billiaswhs
Δημοσιεύσεις: 346
Εγγραφή: 11 Νοέμ 2004 00:29
Επικοινωνία:

Αλγόριθμο σε C/c++

Δημοσίευση από billiaswhs » 10 Απρ 2005 21:57

Ψιλο μπερδεύτικα μήπως μπορείς να μου το εξηγήσεις λίγο πιο αναλυτικά? :(

Άβαταρ μέλους
softius
Script Master
Δημοσιεύσεις: 241
Εγγραφή: 11 Ιαν 2004 19:07
Επικοινωνία:

Αλγόριθμο σε C/c++

Δημοσίευση από softius » 11 Απρ 2005 00:28

Τι δεν κατάλαβες ακριβώς; τον αλγόριθμό (την ιδέα) ή τον κώδικα που έγραψα;

billiaswhs
Δημοσιεύσεις: 346
Εγγραφή: 11 Νοέμ 2004 00:29
Επικοινωνία:

Αλγόριθμο σε C/c++

Δημοσίευση από billiaswhs » 11 Απρ 2005 01:34

Την ιδέα.

Άβαταρ μέλους
softius
Script Master
Δημοσιεύσεις: 241
Εγγραφή: 11 Ιαν 2004 19:07
Επικοινωνία:

Αλγόριθμο σε C/c++

Δημοσίευση από softius » 11 Απρ 2005 01:54

Χμμ... ας υποθέσουμε ότι έχεις τα στοιχεία 1,2,3,4 και θες να βρεις όλες τις πιθανές τετράδες. Η ιδέα είναι παρόμοια με την διαδικασία που θα ακολουθούσες αν το έκανες με το χέρι. Πρώτα δηλαδή παίρνεις ένα αριθμό από την λίστα και μετά ψάχνεις για τις πιθανές τριάδες. Μπροστά από κάθε τριάδα αν προσθέτεις τον αριθμό που πήρες από την λίστα, θα έχεις μία πιθανή τετράδα, σωστά;

Το ίδιο θα συμβεί και στην τριάδα... θα πάρεις ένα-ενα τα πιθανά στοιχεία και για το καθένα θα προσθέτεις μπροστά από κάθε πιθανή διάδα κοκ. Αυτό θα συμβαίνει μέχρι η αναδρομή να μην πρέπει να πράξει για άλλη k-άδα. Οπότε σε αυτό το σημείο έχεις δηλαδή ένα πιθανόν συνδιασμό. Αν σε βοηθά το ouput του προγράμματος θα είναι:

Κώδικας: Επιλογή όλων

11111
11112
11113
11114
11115
11121
11122
&#91;...&#93;
Τα στοιχεία θα επιλέγονται με τον ακόλουθο τρόπο:

Κώδικας: Επιλογή όλων

1
  1
    1
      1
        1
        2
        3
        4
        5
      2
        1
        2
        3
        4
        5
&#91;...&#93;
Αν δεν έχεις ξαναχρησιμοποιήσει αναδρομή, καλό θα ήταν να δεις κάποιο παράδειγμα ;)


Απάντηση

Επιστροφή στο “C, C++”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης