Επισκέπτης Δημοσ. 15 Ιουλίου 2002 Δημοσ. 15 Ιουλίου 2002 Στην σελίδα μου θα βρείτε ένα πρόγραμμα Τζόκερ. Θέλω να προσθέσω μία λειτουργία αρκετά χρήσιμη, αλλά δεν μπορώ να φτιάξω έναν αλγόριθμο για όλες τις περιπτώσεις. Θα προσπαθίσω να είμαι κατανοητός... Καταρχάς μιλάμε για Visual Basic Όπως ξέρετε το πρώτο πεδίο αριθμών του Τζόκερ περιέχει 45 αριθμούς από τους οποίους ζητάμε τους 5. Φυσικά υπάρχουν συστήματα τυποποιημένα, που σου επιτρέπουν να επιλέξεις παραπάνω από 5 αριθμούς -με μεγαλύτερο κόστος και ποσοστό επιτυχίας. Αυτούς τους αριθμούς τους ονομάζω αριθμοσειρές. Για παράδειγμα: 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,11 1,2,3,4,5,6,7,8,9,12 .................. 1,2,3,4,5,6,7,8,9,45 Αυτές είναι οι πρώτες αριθμοσειρές των δέκα αριθμών. Τι θέλω να κάνω εγώ. Να επιλέγει ο χρήστης τον επιθυμητό μέγεθος επιλεγμένων αριθμών (πχ. αριθμοσειρές των 5 αριθμών), ώστε να του εμφανίζει όλες τις πιθανές αριθμοσειρές, αρχίζοντας από την αρχή (πχ. 1,2,3,4,5) και να φτάνει στο τέλος (πχ. 41,42,43,44,45) Το μόνο στοιχείο που είναι μεταβλητο είναι το μέγεθος των αριθμοσειρών (πχ αριθμοσειρές των χ) Η λογικη είναι: Για παράδειγμα οι αριθμοσειρές των 10 Πρώτη : 1,2,3,4,5,6,7,8,9,10 Μετά αυξάνουμε τον τελευταίο αριθμό μέχρι να φτάσει στο 45 1,2,3,4,5,6,7,8,9,10.....1,2,3,4,5,6,7,8,9,45 Μόλις φτάσει το 45, αυξάνουμε τον προ τελευταίο +1, και κάνουμε τον τελευταίο ίσο με προτελευταίο+1 1,2,3,4,5,6,7,8,10,11.....1,2,3,4,5,6,7,8,10,45 Μπορεί να είναι πανεύκολη η λύση, αλλά έχει κολλήσει το μυαλό μου. Έχει περάσει από το μυαλό μου να χρησιμοποιώ έναν πίνακα με 44 θέσεις, και να πειράζω αυτόν, και να τυπώνω την τελική αριθμοσειρά μόλις αλλάζει ο τελευταίος αριθμός της αριθμοσειράς. Να βάλω 45 for..next και 44 if..then ώστε να τσεκάρω τι μέγεθος αριθμών έχει επιλέξει ο χρήστης. Ελπίζω να μην σας μπέρδεψα με το πρόβλημά μου και να βρεθεί καμία καλή υλοποίηση. <small>[ 15-07-2002, 16:18: Το μήνυμα επεξεργάστηκε από: timiman ]</small>
Γηρυόνης Δημοσ. 16 Ιουλίου 2002 Δημοσ. 16 Ιουλίου 2002 Δεν είμαι σίγουρος αν κατάλαβα 100% τι ζητάς αλλά ελπίζω τουλάχιστον να πάρεις ιδέες (γραμμένο σε Java). Μπορείς να αλλάξεις τη σύνταξη πιστεύω. Αν έχεις την εικονική μηχανή εγκαταστημένη μπορείς να το τρέξεις με java Numbers <αριθμός> </font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">public class Numbers { public static void main(String [] arguments) { int length = Integer.parseInt(arguments[0]); for (int i=length; i<46; i++) { for (int j=0; j<length; j++) { if ((j+1) == length) System.out.print(i); else System.out.print((j+1) + " "); } System.out.println(); } } }[/code]</blockquote><font size="2" face="Verdana, Helvetica, sans-serif">
bandito Δημοσ. 16 Ιουλίου 2002 Δημοσ. 16 Ιουλίου 2002 Αν χ είναι το μέγεθος της αριθμοσειράς τότε όλοι οι πιθανοί συνδυασμοί είναι ( 45 ) 45! ( )= ----- ( χ ) χ! (45-χ)! Ενδεικτικά για χ=5 ο αριθμός των συνδυασμών είναι 1.221.759 και ο αριθμός αυξάνει πάρα πολύ όσο αυξάνει το χ. (για χ=10 3.190.187.286) Αν έχεις τρόπο να απεικονίσεις όλους αυτούς τους συνδυασμούς, θα ήθελα να τον μάθω και εγώ. (για χ=10 χρειάζεται 30GB αρχείο). Ένας πρόχειρος αλγόριθμος που σκέφτηκα είναι ο παρακάτω: Έστω οτι χρειάζεσαι τον παρακάτω συνδυασμό ( χ ) ( ) ( y ) Δηλαδή χ είναι όλοι οι δυνατοί αριθμοί και y το μέγεθος κάθε αριθμο σειράς. Ξεκινάς κατασκευάζοντας τις ακολουθίες απο κ=1 εώς κ=y. Για να το καταλάβεις ένα παράδειγμα. ( 5 ) ( )=10 ( 3 ) για y=1 a[5]={1,2,3,4,5} Κοιτάς το πρωτο ψηφιο της αριθμοσειρας και το συνδυάζεις με τα μικροτερα του 1,2 1,3 2,3 1,4 2,4 3,4 1,5 2,5 3,5 4,5 (φροντιζεις να είναι αποθηκευμένα διατεταγμένα) τωρα το πρωτο ψηφιο της αριθμοσειράς και τα συνδυάζεις με τα μικροτερα του 1,2,3 1,2,4 1,2,5 1,3,4 2,3,4 1,3,5 2,3,5 1,4,5 2,4,5 3,4,5 τώρα πάλι το πρωτο με τα μικρότερα για y=4 1,2,3,4 1,2,3,5 1,2,4,5 1,3,4,5 2,3,4,5 και το ίδιο για y=5 1,2,3,4,5 <small>[ 15-07-2002, 18:58: Το μήνυμα επεξεργάστηκε από: bandito ]</small>
Επισκέπτης Δημοσ. 16 Ιουλίου 2002 Δημοσ. 16 Ιουλίου 2002 Χμ.. Για την ακρίβεια ο τύπος είναι έτσι ( απλοποιημένος)-(όπως σωστά λες): Για να βρούμε πόσες 6άδες υπάρχουν που να έχουν σαν μέγιστο αριθμό το 45 τότε: 45*44*43*42*41*40 / 1*2*3*4*5*6 = 5864443200 / 720 = 8145060 πιθανοί συνδιασμοί Λογικό είναι να μεγαλώνει το πλήθος των συνδιασμών. Λογικά θα το στενέψω το όριο (6-15) Σκέφτηκα να βάλω σε ένα αρχείο του πιθανούς συνδιασμούς, αν είναι να μειώσω τα όρια... <img border="0" title="" alt="[Frown]" src="images/icons/frown.gif" />
bandito Δημοσ. 16 Ιουλίου 2002 Δημοσ. 16 Ιουλίου 2002 Και πάλι δεν έχει νόημα. Για να γράψεις ένα συνδυασμό 6 χαρακτήρων χρειάζεται 9 bytes μέσο όρο για τους χαρακτήρες, 5 για τα κομματα και 2 για το new line. Για έξι όπως σωστά είπες χρειάζεται 8.145.060*16=130.320.960 bytes=130MB περίπου. Για πλάκα μόνο σου λέω οτι για 15 χρειάζεσαι 13.104.962.172.192=13,1 ΤerraBytes!!!!!!!!!!!! Επίσης ακόμα και αν τα είχες, θα ήθελες τουλάχιστον μια εβδομάδα για να τελειώσει ο αλγόριθμος ακόμα και αν ειναι τάξης 0(n). <small>[ 16-07-2002, 00:34: Το μήνυμα επεξεργάστηκε από: bandito ]</small>
VBNET_SQL Δημοσ. 30 Μαΐου 2012 Δημοσ. 30 Μαΐου 2012 Στην σελίδα μου θα βρείτε ένα πρόγραμμα Τζόκερ. Θέλω να προσθέσω μία λειτουργία αρκετά χρήσιμη, αλλά δεν μπορώ να φτιάξω έναν αλγόριθμο για όλες τις περιπτώσεις. Θα προσπαθίσω να είμαι κατανοητός... Καταρχάς μιλάμε για Visual Basic Όπως ξέρετε το πρώτο πεδίο αριθμών του Τζόκερ περιέχει 45 αριθμούς από τους οποίους ζητάμε τους 5. Φυσικά υπάρχουν συστήματα τυποποιημένα, που σου επιτρέπουν να επιλέξεις παραπάνω από 5 αριθμούς -με μεγαλύτερο κόστος και ποσοστό επιτυχίας. Αυτούς τους αριθμούς τους ονομάζω αριθμοσειρές. Για παράδειγμα: 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,11 1,2,3,4,5,6,7,8,9,12 .................. 1,2,3,4,5,6,7,8,9,45 Αυτές είναι οι πρώτες αριθμοσειρές των δέκα αριθμών. Τι θέλω να κάνω εγώ. Να επιλέγει ο χρήστης τον επιθυμητό μέγεθος επιλεγμένων αριθμών (πχ. αριθμοσειρές των 5 αριθμών), ώστε να του εμφανίζει όλες τις πιθανές αριθμοσειρές, αρχίζοντας από την αρχή (πχ. 1,2,3,4,5) και να φτάνει στο τέλος (πχ. 41,42,43,44,45) Το μόνο στοιχείο που είναι μεταβλητο είναι το μέγεθος των αριθμοσειρών (πχ αριθμοσειρές των χ) Η λογικη είναι: Για παράδειγμα οι αριθμοσειρές των 10 Πρώτη : 1,2,3,4,5,6,7,8,9,10 Μετά αυξάνουμε τον τελευταίο αριθμό μέχρι να φτάσει στο 45 1,2,3,4,5,6,7,8,9,10.....1,2,3,4,5,6,7,8,9,45 Μόλις φτάσει το 45, αυξάνουμε τον προ τελευταίο +1, και κάνουμε τον τελευταίο ίσο με προτελευταίο+1 1,2,3,4,5,6,7,8,10,11.....1,2,3,4,5,6,7,8,10,45 Μπορεί να είναι πανεύκολη η λύση, αλλά έχει κολλήσει το μυαλό μου. Έχει περάσει από το μυαλό μου να χρησιμοποιώ έναν πίνακα με 44 θέσεις, και να πειράζω αυτόν, και να τυπώνω την τελική αριθμοσειρά μόλις αλλάζει ο τελευταίος αριθμός της αριθμοσειράς. Να βάλω 45 for..next και 44 if..then ώστε να τσεκάρω τι μέγεθος αριθμών έχει επιλέξει ο χρήστης. Ελπίζω να μην σας μπέρδεψα με το πρόβλημά μου και να βρεθεί καμία καλή υλοποίηση. <small>[ 15-07-2002, 16:18: Το μήνυμα επεξεργάστηκε από: timiman ]</small> Φίλε μου μπορώ να σου απαντήσω έστω και καθυστερήμενα σε sql τα [1Η],[2Η],[3Η],[4Η],[5Η] Ειναι τα πεδία ενός πινακα που εχουμε φτιάξει τον JOKER_INSERT_GENERATED για 5 αριθμούς και η παράμετρος " & CInt(TextBox1.Text) & " ειναι η παράμετρος απο πόσους αριθμούς. προφανώς αυτό ειναι για joker για λοττο προσαρμόζουμε τον πίνακα για 6 πεδία και στον παρακάτω κώδικα sql κάνουμε αλλο ένα join για τον 6ο αριθμό WITH cte_Numbers(number) AS (SELECT 1 AS number UNION ALL " & _ "SELECT number + 1 AS Expr1 FROM cte_Numbers AS cte_Numbers_1 " & _ "WHERE (number < " & CInt(TextBox1.Text) & ")) INSERT INTO JOKER_INSERT_GENERATED ([1H],[2H],[3H],[4H],[5H]) " & _ "SELECT CAST(a.number AS VARCHAR(2)) AS [1H], CAST(b.number AS VARCHAR(2)) AS [2H], CAST(c.number AS VARCHAR(2)) AS [3H], CAST(d.number AS VARCHAR(2)) AS [4H], " & _ " CAST(e.number AS VARCHAR(2)) AS [5H] FROM cte_Numbers AS a INNER JOIN cte_Numbers AS b ON a.number < b.number INNER JOIN " & _ "cte_Numbers AS c ON b.number < c.number INNER JOIN cte_Numbers AS d ON c.number < d.number INNER JOIN cte_Numbers AS e ON d.number < e.number Ελπίζω να σε βοηθήσει
kagelos Δημοσ. 30 Μαΐου 2012 Δημοσ. 30 Μαΐου 2012 Αρχαιολόγος είσαι ρε φίλε; Που το βρήκες αυτό το thread και το ανέστησες;!;!;!;!;!;! 1
kirkostas Δημοσ. 26 Σεπτεμβρίου 2012 Δημοσ. 26 Σεπτεμβρίου 2012 ΧΑχαχΑχΑχΑχαχααχ πολύ γέλιο, αρχαιολόγος, έγραψε!
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα