VazorMLK Δημοσ. 3 Νοεμβρίου 2014 Δημοσ. 3 Νοεμβρίου 2014 Καλησπέρα σε όλο το forum,μόλις joinαρα και θα ήθελα αν είναι δυνατόν να με βοηθήσετε στο παρακάτω πρόβλημα.Πρέπει να γράψω ένα πρόγραμμα Java το οποίο να λύνει το εξής πρόβλημα από την εποχή των ιπποτών. Μία ομάδα από ιππότες με ονόματα π.χ 1,2,3,…m, κάθονται γύρω από ένα στρογγυλό τραπέζι και πρέπει να αποφασίσουν ποιος (ένας μόνο) θα πάει στην επόμενη δύσκολη αποστολή. Επιλέγεται ένας αριθμός k και αρχίζουν να μετράνε από τον πρώτο ιππότη και κατά την φορά των δεικτών του ρολογιού μέχρι να μετρηθούν k ιππότες. Ο k-ος ιππότης βγαίνει έξω και το μέτρημα ξαναρχίζει με τον αμέσως επόμενο από τους εναπομείναντες ιππότες. Αυτό συνεχίζεται μέχρι να μείνει μόνο ένας ιππότης στο τραπέζι και αυτός αναλαμβάνει την επόμενη αποστολή. Π.χ για m=5 και k=2 αρχίζουμε το μέτρημα από τον 1 και θα είχαμε1,2,3,4,5 φεύγει ο 2 -> 1,3,4,5 φεύγει ο 4 -> 1,3,5 φεύγει ο 1 -> 3,5 φεύγει ο 5 και μένει τελικά ο 3Θέλουμε μία συνάρτηση S(m, k) η οποία να επιστρέφει τον εναπομένοντα ιππότη για οποιαδήποτε δεδομένα m και k. Θέλουμε να γράψουμε ένα πρόγραμμα java το οποίο να συμπληρώνει και να εκτυπώνει ένα δισδιάστατο πίνακα Α20x20 όπου A[m, k]=S(m,k) για m=1,2,3,…,20 και k=1,2,3,…,20. Γενικά τα προγράμματα μας πρέπει να ακολουθούν το παράδειγμα του αντικειμενοστραφούς δομημένου προγραμματισμού. Αυτό σημαίνει ότι πρέπει να χρησιμοποιούμε κλάσεις, μεθόδους και δομές ελέγχου ροής προγράμματος στις συναρτήσεις για επί μέρους υπολογισμούς και ενέργειες. έχω φτιάξει αυτό εδώ μέχρι στιγμής :import java.io.*;import java.util.*; public class Ergasia{public static void main(String[] args) throws IOException { int rows, cols;int[][] matrix;Scanner input = new Scanner(System.in);System.out.print("Poses Grammes: ");rows = input.nextInt();System.out.print("Poses Sthles: ");cols = input.nextInt();matrix = new int[rows][cols];System.out.println("Dwse ta stoixeia tou pinaka (grammh pros grammh): ");for (int i = 0; i < 20; i++) {for (int j = 0; j < 20; j++) {matrix[j] = input.nextInt();}}System.out.println("Matrix is: ");for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {System.out.print(matrix[j]+" ");}System.out.println();}}}Ευχαριστώ εκ των προτέρωνΥ.Γ. Είμαι Μαθηματικό γι'αυτό δεν έχω και μεγάλη ιδέα
albNik Δημοσ. 3 Νοεμβρίου 2014 Δημοσ. 3 Νοεμβρίου 2014 Φτιαξε καπως ετσι class CircularList { List<int> list; int index = -1; public CircularList(int m) { list = new List<int>(); for(int i = 1; i <= m; i++) list.Add(i); } public void RemoveAfter(int k) { ... } public int Count() { return list.Count; } public int GetKnight() { return list[0]; } } .... CircularList cl = new CircularList(5); int k = 2; while(cl.Count() > 1) cl.RemoveAfter(k); A[5,2] = cl.GetKnight(); Γραψε των κωδικα για την RemoveAfter() και ειναι ετοιμο (ειναι C#)
tr3quart1sta Δημοσ. 4 Νοεμβρίου 2014 Δημοσ. 4 Νοεμβρίου 2014 ωραια, μιας και εισαι μαθηματικο, μηπως μπορεις να σκεφτεις μια formula που μπορει να υπολογιζει τον εναπομεινοντα κατευθειαν, χωρις δηλαδη να χρειαζεσαι βρογχους που θα τους αφαιρει εναν-εναν?? κατι δλδ της μορφης: i = x - 2^n = x - 2^Floor[Log[2,x]] 2i + 1 = 2(x - 2^Floor[Log[2,x]]) + 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα