Γεια σας θα ηθελα αν μπορει καποιος να με βοηθησει να λυσω ενα προβλημα για να φτιαξω ενα προγραμμα με αριθμους
π.χ εχω 57 αριθμους ας πουμε απο το 1 εως το 57 θελω το προγραμμα να προσθετει ανα 6 αριθμους παντα παντα σε 6 αδες με ενα υπολογισμο που εκανα πιστευω ειναι σωστος, τα πιθανα αθροισματα που βγαινουν ειναι =15.762.598.695.796.736
να πω ενα π.δ εχουμε σα πρωτο αθροισμα
τους αριθμους:1+2+3+4+5+6=το αθροισμα του 21
το επομενο 1+2+3+4+5+7=22 και παει λεγοντας ωστε να βρεθουν ολα τα αθροισματα απο το 1-57 παντα σε 6 αδες.
θελω να γραφω το αθροισμα που ζηταω και να μου λεει ποιες 6 αδες κανουν αυτο το αθροισμα πχ ενα αριθμο 2000 ποιες 6 αδες απο τα τοσα εκατομυρια κανουν αυτο το αθροισμα
αν μπορει καπιος να με βοηθησει πως μπορω να φτιαξω κατι τετοιο
οι αριθμοι που ζηταω ειναι που θα προσθετονται ειναι αυτοι που θα μπουν για τ αθροισματα συνολο 57
30
56
75
105
111
116
141
146
315
371
381
386
390
411
416
426
431
440
441
470
474
653
701
709
726
755
762
789
806
811
818
834
836
837
841
873
878
1064
1093
1121
1126
1127
1148
1173
1190
1202
1220
1236
1464
1505
1568
1573
1770
1800
1952
2085
2532
ΕΥΧΑΡΙΣΤΩ ΠΡΟΚΑΤΑΒΟΛΙΚΟς ΟΠΟΙΟΣ ΜΕ ΒΟΗΘΗΣΕΙ!!!
Εμφάνιση 1-15 από 16
-
04-07-12, 14:01 Βοηθεια για κατασκευη προγραμματος!! #1
-
04-07-12, 14:16 Απάντηση: Βοηθεια για κατασκευη προγραμματος!! #2
Τα θες σε κάποια συγκεκριμένη γλώσσα προγραμματισμού αυτά; Οι περισσότερες γλώσσες έχουν σχετικές συναρτήσεις που υπολογίζουν αυτό που θες με μία κλήση.
Είναι μήπως άσκηση στα πλαίσια κάποιου μαθήματος; Αν ναι, ίσως να μην επιτρέπεται να τις χρησιμοποιήσεις.
Αυτό θες πάντως.
-
04-07-12, 14:20 Απάντηση: Βοηθεια για κατασκευη προγραμματος!! #3
εχω εγκαταστησει στον υπολογηστη μου Python 2.7 αλλα αν σου ειναι ευκολο και σε αλλη γλωσσα την εγκαταστω. σε αυτο που μου εστειλες δεν καταλαβαινω και πολλα
-
04-07-12, 14:24 Απάντηση: Βοηθεια για κατασκευη προγραμματος!! #4
Η python είναι τέλεια γι'αυτό.
Έχεις καθόλου εμπειρία με τη γλώσσα; Κοίτα τη βιβλιοθήκη itertools.
Η σελίδα στη wikipedia περιγράφει απλά τα μαθηματικά πίσω από τα combinations.
-
04-07-12, 21:54 Απάντηση: Βοηθεια για κατασκευη προγραμματος!! #5
παρα πολυ λιγο σχεδον καθολου
- - - Updated - - -
την βιβλιοθηκη την κοιταξα το μονο που καταφερνω να κανω προσθεση αφαιρεση και διαιρεση αν μπορεις σε παρακαλω να μου γραψεις το κωδικα που χρειαζεται να γραψω στην Python
-
05-07-12, 10:41 Απάντηση: Βοηθεια για κατασκευη προγραμματος!! #6
Δες τη συνάρτηση combinations που έχει και παραδείγματα χρήσης. Αν θες να βρεις ποιες εξάδες έχουν τα αθροίσματα που αναφέρεις στο κατεβατό του αρχικού σου μηνύματος, το παρακάτω σου κάνει:
Κώδικας:import itertools combs = itertools.combinations(numbers, size) results = [cset for cset in combs if sum(cset) in sums]
-
05-07-12, 13:40 Απάντηση: Βοηθεια για κατασκευη προγραμματος!! #7
μηπως θα μπορουσες να γινεις ποιο διαφωτιστικος?ο αριθμος 11712 που επελεξα που δεν τον ειχα Βαλει πριν ειναι αν προσθεσης τους 6 τελευταιους μεγαλυτερους βγαινει αυτο το αθροισμα
καπως ετσι το γραφω αλλα δεν βγαζω ακρη.
def NM2():
import itertools
combs = itertools.combinations(30, 56, 75 , 105, 111, 116, 141, 146, 315, 371, 381, 386, 390, 411, 416, 426, 431, 440, 441, 470, 474, 653, 701, 709, 726, 755, 762, 789, 806, 811, 818, 834, 836, 837, 841, 873, 878, 1064, 1093, 1121, 1126, 1127, 1148, 1173, 1190, 1202, 1220, 1236, 1464, 1505, 1568, 1573, 1770, 1800, 1952, 2085, 2532)
results = [cset for cset in combs if sum(cset) in 11712]
[/QUOTE]Τελευταία επεξεργασία από το μέλος malamatenia1 : 05-07-12 στις 14:38.
-
05-07-12, 15:02 Απάντηση: Βοηθεια για κατασκευη προγραμματος!! #8
Καλείς λάθος την συνάρτηση combinations. Πρέπει να της δώσεις δύο ορίσματα. Το πρώτο είναι το σύνολο των αριθμών και το δεύτερο το πλήθος των αριθμών σε κάθε ομάδα για την οποία θα υπολογίζεις το άθροισμα.
Γράψε το κάπως έτσι:
Κώδικας:def NM2(): import itertools numbers = [30, 56, 75, 105, 111, 116, 141, 146, 315, 371, 381, 386, 390, 411, 416, 426, 431, 440, 441, 470, 474, 653, 701, 709, 726, 755, 762, 789, 806, 811, 818, 834, 836, 837, 841, 873, 878, 1064, 1093, 1121, 1126, 1127, 1148, 1173, 1190, 1202, 1220, 1236, 1464, 1505, 1568, 1573, 1770, 1800, 1952, 2085, 2532] combs = itertools.combinations(numbers, 6) results = [cset for cset in combs if sum(cset) == 11712]
Για να καταλάβεις, διάβασε τι είναι οι λίστες στην python!
EDIT: Μην ξεχάσεις να επιστρέψεις κάτι στη συνάρτηση με return.Τελευταία επεξεργασία από το μέλος guardianhelm : 05-07-12 στις 15:07.
-
05-07-12, 16:16 Απάντηση: Βοηθεια για κατασκευη προγραμματος!! #9
Σε ευχαριστω για το ενδιαφερον σου εισαι πολυ καλος!
το εγραψα ετσι ωπος μου γραφεις αλλα και παλι δεν βγαζω ακρη. σου ειπα ειναι οτι δεν ειμαι και τοσο καλη στην γλωσσα γνωριζο παρα πολυ λιγα.
αυτο που ζηταω ειναι αυτοι η αριθμοι συνολο 57 που εχω βαλει να βρω ενα τροπο να προσθετη το προγραμμα παντα ανα 6 αδες να βρει ολα τα αθροισματα τους
ενα παραδειγμα να σου δωσο να καταλαβεις ειναι αυτο
θελω να επιλεγω ενα τυχαιο αριθμο πχ 11712 και να κανει αναζητηση το προγραμμα απο αυτους τους αριθμους που εχω επιλεξει τους 57, σε 6 αδες η αριθμηση, ποιες 6 αδες κανουν αθροισμα αυτον τον αριθμο?
για τον αριθμο 11712 αν το επελεγα τωρα η μονη 6 αδα που θα μου εβγαζε το προγραμμα ειναι αυτη 1573+
1770+1800+1952+2085+2532=11712 καμια αλλη 6 αδα δεν θα υπαρχει διοτι αν αλλαξει ο ενας αριθμος απο την 6 αδα σιγουρα το αποτελεσμα θα ειναι μικροτερο. το μεγαλυτερο σε αθροισμα ειναιι το 11712 και το μικροτερο το 493 που αποτελειται απο τους αριθμους 30+56+75+105+111+116=493
θελω να επιλεγω εναν τυχαιο αριθμο απο το 493 εως το 11712 μεσα σε αυτα τα ορια και να μου λεει ποιες 6 αδες κανουν το αθροισμα σε αυτον το αριθμο που εχω επιλεξει
σε παρακαλω κανε κατι βρες μου των κωδικα ολοκληρωμενο να τον αντιγραψω θα σου ειμαι υποχρεη
-
05-07-12, 16:42 Απάντηση: Βοηθεια για κατασκευη προγραμματος!! #10
Αν δεν θες το 11712 να είναι σταθερό, αντικατάστησέ το με μια μεταβλητή την οποία θα δίνεις σαν όρισμα στη συνάρτηση, ως εξής:
Κώδικας:def NM2(number): import itertools numbers = [30, 56, 75, 105, 111, 116, 141, 146, 315, 371, 381, 386, 390, 411, 416, 426, 431, 440, 441, 470, 474, 653, 701, 709, 726, 755, 762, 789, 806, 811, 818, 834, 836, 837, 841, 873, 878, 1064, 1093, 1121, 1126, 1127, 1148, 1173, 1190, 1202, 1220, 1236, 1464, 1505, 1568, 1573, 1770, 1800, 1952, 2085, 2532] combs = itertools.combinations(numbers, 6) return [cset for cset in combs if sum(cset) == number]
-
05-07-12, 17:15 Απάντηση: Βοηθεια για κατασκευη προγραμματος!! #11
εισαι και ο τελειος προγραμματιστης σε ευχαριστω παρα παρα πολυ για την βοηθεια σου..
τα ξανα λεμε
φιλια πολλα!!!!!
-
05-07-12, 19:49 Απάντηση: Βοηθεια για κατασκευη προγραμματος!! #12
Αυτός είναι ένας απλός τρόπος, αλλά δεν είναι και πολύ γρήγορος χωρίς να χρησιμοποιήσεις κάποια ιδιαίτερη συνάρτηση...
Είναι γραμμένο σε c++ αλλά δεν είναι δύσκολο αν θες να το μετατρέψεις και σε python αρκεί να ξέρεις το for...
Κώδικας:#include<iostream> using namespace std; int main(){ int list[58] = {30,56,75,105,111,116,141,146,315,371,381,386,390,411,416,426,431, 440,441,470,474,653,701,709,726,755,762,789,806,811,818,834,836, 837,841,873,878,1064,1093,1121,1126,1127,1148,1173,1190,1202,1220, 1236,1464,1505,1568,1573,1770,1800,1952,2085,2532}; int sum; int number; long double count=0; int compin=0; cout << "insert number : "; cin >> number; for(int i1=0;i1<57;i1++){ cout <<"Please wait...Till now "<< count <<" compinations have been checked\n\n"; for(int i2=0;i2<57;i2++){ for(int i3=0;i3<57;i3++){ for(int i4=0;i4<57;i4++){ for(int i5=0;i5<57;i5++){ for(int i6=0;i6<57;i6++){ sum = list[i1] + list[i2] + list[i3] + list[i4] + list[i5] + list[i6]; if(sum==number){ cout <<list[i1] <<" + " <<list[i2] <<" + " <<list[i3] <<" + " <<list[i4] <<" + " <<list[i5] <<" + " <<list[i6]<<" = " << sum << endl; compin++; } count++; } } } } } } system("PAUSE"); return 0; }
-
06-07-12, 10:30 Απάντηση: Βοηθεια για κατασκευη προγραμματος!! #13
Όχι, είναι χόμπυ για το καλοκαίρι!
Το πρόβλημα λέγεται subset sum. Είναι NP-complete. Οι λύσεις που έχουν προταθεί είναι σωστές αλλά πρακτικά ανεφάρμοστες. Ο καθηγητής/καθηγήτρια σίγουρα ζητάει κάτι άλλο.
-
06-07-12, 11:34 Απάντηση: Βοηθεια για κατασκευη προγραμματος!! #14
Από μαθηματικής άποψης αν έχεις ένα σύνολο διαφορετικών αριθμών π.χ. (2,5,8,9,12, 15 ,17,20)
και θες να μάθεις πόσα υποσύνολα (όχι μόνο μήκους 6) έχουν άθροισμα π.χ. 16 :
η απάντηση είναι στο συντελεστή του x^16 του πολυωνύμου:
(1+x^2)(1+x^5)(1+x^8)(1+x^9) ... το οποίο μπορεί να υπολογιστεί με μολύβι και χαρτί για λίγους αριθμούς,
η με λίγες γραμμές κώδικα
Κώδικας:long[] ways = new long[maxSum + 1]; ways[0] = 1; foreach(var number in set) for(int j = ways.Length - 1; j >= 0; j--) if(ways[j] > 0) ways[j + number] += ways[j];
Τώρα για εξάδες ... κάτι παρόμοιοΤελευταία επεξεργασία από το μέλος AlbNik : 06-07-12 στις 12:00.
-
06-07-12, 13:06 Απάντηση: Βοηθεια για κατασκευη προγραμματος!! #15
Βασικά εκείνη την ώρα δεν μου φάνηκε πολύ πιθανό, για κάποιο λόγο θεώρησα αρκετό το ότι δεν ξέρω σχολές στην ελλάδα που να διδάσκουν python ή/και καθηγητή που να δίνει τέτοιο περιθώριο σχετικά με το ποια γλώσσα προγραμματισμού να χρησιμοποιήσεις. Έχεις δίκιο όμως.
Γιατί να ζητάει κάτι άλλο; Το ότι το πρόβλημα είναι NP-Complete δημιουργεί προβλήματα όσο αυξάνεται το μέγεθος της εισόδου. Εφόσον μιλάμε για μικρή/σταθερή είσοδο (57 αριθμούς), ο υπολογισμός θα τρέχει σε λογικό και παρόμοιο χρόνο πάνω κάτω (το έτρεξα κιόλας). Φυσικά με λίγο παραπάνω αριθμούς -πχ ακόμα και με 70- είναι πολύ πιθανό να μην τερματίζει σύντομα.
Παρόμοια Θέματα
-
Κατασκευη προγραμματος με κοινη db που τρεχει σε 2 pc;;
Από lionKingMan στο φόρουμ Προγραμματισμός και γλώσσες προγραμματισμούΜηνύματα: 16Τελευταίο Μήνυμα: 01-03-12, 21:38 -
Λιγη βοήθεια για κατασκευή σελίδας.
Από nkoumo στο φόρουμ Web authoring, development & web designΜηνύματα: 5Τελευταίο Μήνυμα: 10-02-12, 10:34 -
κατασκευη ιστοσελιδας βοηθεια
Από DAYINA στο φόρουμ Web authoring, development & web designΜηνύματα: 7Τελευταίο Μήνυμα: 07-07-09, 12:16 -
ΒΟΗΘΕΙΑ !!! ΜΕ ΤΗΝ ΚΑΤΑΣΚΕΥΗ ΙΣΤΟΣΕΛΙΔΑΣ
Από A.V.VHANIA στο φόρουμ Web authoring, development & web designΜηνύματα: 6Τελευταίο Μήνυμα: 01-02-09, 00:03 -
Βοήθεια για κατασκευή ιστοσελίδας
Από Gregory στο φόρουμ Προγραμματισμός και γλώσσες προγραμματισμούΜηνύματα: 17Τελευταίο Μήνυμα: 20-04-07, 16:02
Bookmarks