Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
47 lines (32 sloc) 5 KB
''' άσκηση από το http://pythonies.mysch.gr/chapters/answer.pdf
Εδώ δίνεται ένας "σκελετός" για τη λύση της παρακάτω άσκησης:
Ένας άνθρωπος αδειάζει σ’ ένα τραπέζι ένα κουτί που περιέχει 48 σπίρτα και τα χωρίζει σε τρεις άνισους σωρούς. Παίρνει από τον πρώτο σωρό τόσα σπίρτα όσα υπάρχουν στο δεύτερο σωρό και τα προσθέτει στον δεύτερο σωρό. Στη συνέχεια, παίρνει από το δεύτερο σωρό τόσα σπίρτα όσα υπάρχουν στον τρίτο σωρό και τα προσθέτει στον τρίτο σωρό. Τέλος, παίρνει από τον τρίτο σωρό τόσα σπίρτα όσα υπάρχουν στον πρώτο σωρό και τα προσθέτει στον πρώτο σωρό. Μετά από αυτές τις μετακινήσεις, όλοι οι σωροί περιέχουν το ίδιο πλήθος σπίρτων. Πόσα σπίρτα περιείχε κάθε σωρός αρχικά;
Να γράψετε ένα πρόγραμμα που υπολογίζει τη λύση του προβλήματος, ακολουθώντας τη διαδικασία που περιγράφεται αντίστροφα. Χρησιμοποιήστε τρεις μεταβλητές h1, h2 και h3 για το πλήθος των σπίρτων που περιέχει κάθε σωρός. Αρχικά, οι τρεις μεταβλητές θα έχουν την ίδια τιμή, αντιστοιχώντας στην τελική κατάσταση. Ακολουθήστε με την αντίστροφη σειρά τα βήματα που περιγράφονται, γράφοντας τις αντίστοιχες εντολές. Όταν τελειώσετε και εκτελέσετε το πρόγραμμα, οι μεταβλητές h1, h2 και h3 θα πρέπει να αντιστοιχούν στην αρχική κατάσταση των σωρών, δηλαδή στην απάντηση που αναζητούμε.
Στη συνέχεια, συμπληρώστε το πρόγραμμα με τις κατάλληλες εντολές έτσι ώστε να γίνεται και η επαλήθευση της απάντησης. Δηλαδή, με βάση το αρχικό πλήθος σπίρτων που υπολογίσατε για τους τρεις σωρούς, ακολουθήστε κανονικά τα βήματα όπως περιγράφονται, γράφοντας τις αντίστοιχες εντολές. Το πρόγραμμα θα πρέπει στο τέλος να ελέγχει αν οι μεταβλητές h1, h2 και h3 έχουν την ίδια τιμή, επαληθεύοντας τη λύση.
'''
h1 = h2 = h3 =
print("Τελικοί σωροί:", h1, h2, h3, end="\n\n")
h1 = # παίρνει από τον πρώτο σωρό τα μισά σπίρτα
h3 = # και τα επιστρέφει στον τρίτο σωρό.
print("Αντίστροφα, από τον 1ο σωρό στον 3ο:", h1, h2, h3)
h3 = # παίρνει από τον τρίτο σωρό τα μισά σπίρτα
h2 = # και τα επιστρέφει στον δεύτερο σωρό.
print("Αντίστροφα, από τον 3ο σωρό στον 2ο:", h1, h2, h3)
h2 = # παίρνει από τον δεύτερο σωρό τα μισά σπίρτα
h1 = # και τα επιστρέφει στον πρώτο σωρό.
print("Αντίστροφα, από τον 2ο σωρό στον 1ο:", h1, h2, h3)
print("\nΑπάντηση. Αρχική κατάσταση:", h1, h2, h3, end="\n\n")
h1 = # παίρνει από τον πρώτο σωρό όσα σπίρτα υπάρχουν στο δεύτερο
h2 = # και τα προσθέτει στον δεύτερο σωρό.
print("Επαλήθευση, από τον 1ο σωρό στον 2ο:", h1, h2, h3)
h2 = # παίρνει από τον δεύτερο σωρό όσα σπίρτα υπάρχουν στον τρίτο
h3 = # και τα προσθέτει στον τρίτο σωρό.
print("Επαλήθευση, από τον 2ο σωρό στον 3ο:", h1, h2, h3)
h3 = # παίρνει από τον τρίτο σωρό όσα σπίρτα υπάρχουν στον πρώτο
h1 = # και τα προσθέτει στον πρώτο σωρό.
print("Επαλήθευση, από τον 3ο σωρό στον 1ο:", h1, h2, h3)
print("\nΤελικοί σωροί:", h1, h2, h3)
if (h1 == h2 == h3 == 48 // 3):
print("Επαληθεύτηκε, το πρόγραμμα λειτουργεί σωστά.")
else:
print("Η τελική κατάσταση δεν είναι σωστή, ελέγξτε το πρόγραμμα.")