Follow the Bouncing Ball
Ας υποθέσουμε ότι θέλετε να δημιουργήσετε μια προφύλαξη οθόνης που έχει μια μπάλα να αναπηδά γύρω από τις άκρες. Η δράση θα συνεχιστεί μέχρι η μπάλα να χτυπήσει σε γωνία (σαν τραπέζι μπιλιάρδου). Σε εκείνο το σημείο, η μπάλα εξαφανίζεται από την οθόνη και η οθόνη γίνεται μαύρη.
Οι μπάλες αναπηδούν από τους τοίχους σύμφωνα με τους νόμους της φυσικής. Η γωνία της μπάλας καθώς πλησιάζει τον τοίχο (γωνία πρόσπτωσης) θα ισούται με τη γωνία της μπάλας καθώς αναπηδά για να απομακρυνθεί (γωνία ανάκλασης).
Γράψτε ένα πρόγραμμα που θα καθορίζει πόσες αναπηδήσεις θα χρειαστούν προτού η μπάλα που αναπηδά πέσει σε μια γωνία. Οι διαστάσεις της οθόνης είναι στο διάστημα μονάδων. Θεωρήστε τη μπάλα ως ένα σημείο στην οθόνη. Τα γωνιακά τμήματα (corner pockets) είναι μονάδες κατά μήκος κάθε τοίχου και αν μια μπάλα χτυπήσει στο τμήμα αυτό του τοίχου, στην άκρη μιας τρύπας, θα συνεχίσει να αναπηδά.
Ένα παράδειγμα οθόνης φαίνεται παρακάτω:
Η είσοδος θα αποτελείται από τέσσερις ακέραιους, ο καθένας σε ξεχωριστή γραμμή:
- – το πλάτος της οθόνης,
- – το ύψος της οθόνης,
- – η αρχική θέση της μπάλας στο κάτω μέρος της οθόνης,
- – η θέση της μπάλας όταν αναπηδά από τον δεξιό τοίχο,
- Η έξοδος αποτελείται από έναν ακέραιο που υποδεικνύει τον αριθμό των αναπηδήσεων που κάνει η μπάλα πριν εξαφανιστεί σε μια γωνία. Μετρήστε το χτύπημα από τον δεξιό τοίχο ως την πρώτη αναπήδηση. Είναι πιθανό η μπάλα να μην αναπηδήσει ποτέ σε γωνία (υποθέτοντας επιφάνεια χωρίς τριβή), σε αυτήν την περίπτωση, η έξοδος θα πρέπει να είναι . Σημειώστε ότι όταν η μπάλα χτυπήσει σε pocket δεν υπολογίζεται ως αναπήδηση. Δεν χρειάζεται να προγραμματίσετε το πραγματικό animation.
Παράδειγμα
input
300
200
200
100
output
2
Comments