ακομα επειδη δεν ειμαι καθηγητης αλλα μου αρεσει πολυ η προσπαθεια που γινεται εδω μεσα ειπα να συνεισφερω και εγω οπως μπορω.Ωραίος, σούπερ.
ασκηση του nikolasmer παλια την ειχε βαλει σαν 4ο θεμα και απο οτι ειπε τον κυνηγουσαν κατι γονεις να τον....Χα χα
Καλησπέρα
Δεν ξέρω αν παλαιότερα το έχει ανεβάσει συνάδελφος αλλά έκατσα και έκανα αλγόριθμο ο οποίος εμφανίζει τους 10 πρώτους αριθμούς. Στα μαθηματικά πρώτος αριθμός (ή απλά πρώτος) είναι ένας φυσικός αριθμός μεγαλύτερος της μονάδας με την ιδιότητα οι μόνοι φυσικοί διαιρέτες του να είναι η μονάδα και ο εαυτός του. Πολύ καλή τροφή για σκέψη όπως και άσκηση για Θέμα Β.
Παρακάτω σας το αποστέλω. :)
ωραιο και χρησιμο μερικες φορες τα πιο απλα ειναι τα καλυτερα.εξαλλου και να το εχουν ανεβασει ξανα δεν πειραζει γιατι οπως λεει και μια παροιμια η επαναληψη μητηρ πασης παθησεως που σημαινει οτι οταν παθεις πολλες φορες το ιδιο πραγμα στο τελος κατι θα σου μεινει και θα εισαι πιο προσεκτικος.πως σου φαινεται με αφορμη τη δικια σου να προσθεταμε και αυτο?
Η εικασία του ο Κρίστιαν Γκόλντμπαχ (1690-1764)
Ο Κρίστιαν Γκόλντμπαχ, υποστήριξε ότι κάθε άρτιος αριθμός μεγαλύτερος του 2, μπορεί να γραφεί σαν άθροισμα δύο πρώτων αριθμών. Η απόδειξη της παραπάνω εικασίας βασανίζει ακόμα και σήμερα αρκετούς μαθηματικούς αφού συνεχώς νεώτεροι και ισχυρότεροι ηλεκτρονικοί υπολογιστές την επιβεβαιώνουν για όλο και μεγαλύτερους αριθμούς.
να γραψετε προγραμμα σε γλωσσα που θα διαβαζει εναν αρτιο ακεραιο απο το χρηστη μεγαλυτερο του 2 και θα τον εμφανιζει σαν αθροισμα δυο πρωτων αριθμων
Wooooowwwww mind blown συνάδελφε. :D :D :D Θα το ελένξω και θα περιμένω και δικό σου αλγόριθμο...
δεν ειμαι καθηγητης σε φροντιστηριο η σχολειο.εχω κανει ιδιαιτερα οσο σπουδαζα κτλ αλλα ως εκει χαχ.ωραιος παντως
Με όλο το σεβασμό και χωρίς καμία δόση υπόδειξης θεωρώ ότι θα ήταν καλύτερο επειδή μας διαβάζουν και μαθητές να περιοριστούμε σε ασκήσεις "κανονικές" γιατί τελευταίες ημέρες τα παιδιά πιάνονται από το παραμικρό με αποτέλεσμα να ξεκινάει μια απίστευτη ανασφάλεια. Ας κρατήσουμε τις ασκήσεις μας για τη νέα φουρνιά. Και πάλι τονίζω ότι δεν έχω πρόθεση να υποδείξω κάτι ούτε να την πω σε κάποιον.
Δινεται ενας πινακας ακεραιων 100 θεσεων.ταξινομηστε τον ως προς την συχνοτητα των στοιχειων του ως εξης:
1)το στοιχειο που υπαρχει περισσοτερες φορες στον πινακα μπαινει πρωτο και αυτο που υπαρχει τις λιγοτερες τελευταιο.
2)αν 2 η περισσοτεροι αριθμοι εχουν την ιδια συχνοτητα ταξινομουνται κατα αυξουσα σειρα δλδ πρωτος μπαινει ο μικροτερος
Αλγόριθμος ασκηση
θεσεις ← 10
ΓΡΑΨΕ "αρχικός πινακας:"
ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ θεσεις
πινακ[ι] ← ΤΥΧΑΙΟΣ_ΑΚΕΡΑΙΟΣ(0, 10)
συχν[ι] ← 0
Εμφάνισε πινακ[ι]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Εμφάνισε "-----"
!Ευρεση συχνοτήτων.
ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ θεσεις
ΓΙΑ ξ ΑΠΟ 1 ΜΕΧΡΙ θεσεις
ΑΝ πινακ[ι] = πινακ[ξ] ΤΟΤΕ
συχν[ι] ← συχν[ι] + 1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
! Ταξινόμηση.
ΓΙΑ ι ΑΠΟ 2 ΜΕΧΡΙ θεσεις
ΓΙΑ ξ ΑΠΟ θεσεις ΜΕΧΡΙ ι ΜΕ_ΒΗΜΑ -1
ΑΝ συχν[ξ - 1] < συχν[ξ] Η (συχν[ξ - 1] = συχν[ξ] ΚΑΙ πινακ[ξ - 1] > πινακ[ξ]) ΤΟΤΕ
τεμπ ← συχν[ξ]
συχν[ξ] ← συχν[ξ - 1]
συχν[ξ - 1] ← τεμπ
τεμπ ← πινακ[ξ]
πινακ[ξ] ← πινακ[ξ - 1]
πινακ[ξ - 1] ← τεμπ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ "τελικός πινακας:"
ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ θεσεις
ΓΡΑΨΕ πινακ[ι]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Τέλος ασκηση
ΑΣΚΗΣΗ ΜΕΓΙΣΤΟ ΓΙΝΟΜΕΝΟεπειδή η "γλώσσα" μου είναι στυφή ... υλοποίηση σε python3 ... no cheat !!
Δινεται πινακας ακεραιων 20 θεσεων Α[20].να φτιαξετε προγραμμα σε γλωσσα που θα εμφανιζει το μεγιστο γινομενο που μπορουμε να παρουμε αν πολλαπλασιασουμε μεταξυ τους 5 στοιχεια του πινακα.(θελω πολυ να δω καποιον να τη λυνει αυτη την ασκηση με τιμιο τροπο)
from random import randint
nums = []
for i in range(20):
nums.append(randint(1,100))
print (nums)
n = 20
mmax = 1
for i in range(0,n-4):
for j in range(i+1,n-3):
for k in range(j+1,n-2):
for l in range(k+1,n-1):
for m in range(l+1,n):
mul = nums[i] * nums[j] * nums[k] * nums[l] * nums[m]
if mul > mmax:
mmax = mul
factors = [nums[i], nums[j], nums[k], nums[l], nums[m]]
print (mmax, factors)
επειδή η "γλώσσα" μου είναι στυφή ... υλοποίηση σε python3 ... no cheat !!Κώδικας: [Επιλογή]from random import randint
nums = []
for i in range(20):
nums.append(randint(1,100))
print (nums)
n = 20
mmax = 1
for i in range(0,n-4):
for j in range(i+1,n-3):
for k in range(j+1,n-2):
for l in range(k+1,n-1):
for m in range(l+1,n):
mul = nums[i] * nums[j] * nums[k] * nums[l] * nums[m]
if mul > mmax:
mmax = mul
factors = [nums[i], nums[j], nums[k], nums[l], nums[m]]
print (mmax, factors)
>:D Ταξινόμηση και πολ/μος μου φάνηκε κλεψιά 15504 δοκιμές είναι το "τίμιο" μεροκάματο
νικο δεν νομιζω οτι ειναι για μαθητες καποιες ξεφευγουν.βασικα ολες σχεδον αλλες περισσοτερο αλλες λιγοτερο.στις περισσοτερες εχω ανεβασει λυσεις αλλα επειδη ειναι προχειρες δουλευουν σωστα αλλα δεν νομιζω οτι ειναι οι καλυτερες σε ολες τις ασκησεις.εξαλλου απλα τις βρηκα σε ξενα σαιτ ή απο παλια θεματα εδω που πια εχουν ξεχαστει.δεν ειναι δικες μου.σε μερικες απλα εβαλα προσθετα ερωτηματα και τις δυσκολεψα.ναι απλα επειδη θα πνιγομαι αυτες τις μερες δεν εχω ξερω ποτε θα μπορεσω να τις ανεβασω με σωστες διατυπωσεις να μην υπαρχουν ασαφειες κτλ.εννοειται οτι ο καθενας μπορει να τις κανει copy paste και να τις βαλει σε ενα word.αλλα μολις βρω χρονο θα τις ανεβασω κι εγω οργανωμενα+1
>:D Η Ταξινόμηση και πολ/μος μου φάνηκε κλεψιά 15504 δοκιμές είναι το "τίμιο" μεροκάματο τώρα για τα 5 for το χώρεσε ίσα ίσα στο idle. Θεώρησα ότι ο αλγοριθμικός σου στόχος ήταν να υλοποιηθούν όλοι οι δυνατοί συνδυασμοί μεταξύ καθορισμένου πλήθους θετικών στοιχείων .
:-[Συγνώμη, όταν λέτε "ΑΣΚΗΣΗ ΚΑΛΗ!!", εννοείτε για κάποιο περιοδικό (ΣΤΑΥΡΟΛΕΞΟ, ΤΕΣΤ κλπ.), με το οποίο περνάμε την ώρα μας, η για Πανελλήνιες Εξετάσεις;
Ελπίζω να αναφέρεστε στο πρώτο.
ΑΣΚΗΣΗ ΜΕΓΙΣΤΟ ΓΙΝΟΜΕΝΟ
Δινεται πινακας ακεραιων 20 θεσεων Α[20].να φτιαξετε προγραμμα σε γλωσσα που θα εμφανιζει το μεγιστο γινομενο που μπορουμε να παρουμε αν πολλαπλασιασουμε μεταξυ τους 5 στοιχεια του πινακα.(θελω πολυ να δω καποιον να τη λυνει αυτη την ασκηση με τιμιο τροπο)
Αλγόριθμος ΓΙΝ5ΜΑΧ
!ΕΙΣΑΓΩΓΗ ΑΡΙΘΜΩΝ
ΓΡΑΨΕ "ΑΡΧΙΚΟΣ ΠΙΝΑΚΑΣ:"
ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 20
Π[Ι] ← ΤΥΧΑΙΟΣ_ΑΚΕΡΑΙΟΣ(-20,-1)
ΓΡΑΨΕ Π[Ι]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
!ΤΑΞΙΝΟΜΗΣΗ ΦΘΙΝΟΥΣΑ
ΓΙΑ Ι ΑΠΟ 2 ΜΕΧΡΙ 20
ΓΙΑ Ξ ΑΠΟ 20 ΜΕΧΡΙ Ι ΜΕ_ΒΗΜΑ -1
ΑΝ Π[Ξ-1] < Π[Ξ] ΤΟΤΕ
Τ ← Π[Ξ-1]
Π[Ξ-1] ← Π[Ξ]
Π[Ξ] ← Τ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ ""
ΓΡΑΨΕ "ΤΑΞΙΝΟΜΗΜΕΝΟΣ ΠΙΝΑΚΑΣ:"
ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 20
ΓΡΑΨΕ Π[Ι]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ ""
ΓΡΑΨΕ "ΜΕΓΙΣΤΟ ΓΙΝΟΜΕΝΟ: "
Γ1 ← Π[1] * Π[2] * Π[3] * Π[4] * Π[5]
Γ2 ← Π[1] * Π[2] * Π[3] * Π[20] * Π[19]
Γ3 ← Π[1] * Π[20] * Π[19] * Π[18] * Π[17]
ΑΝ Γ1 > Γ2 ΚΑΙ Γ1 > Γ3 ΤΟΤΕ
ΓΡΑΨΕ Γ1
ΑΛΛΙΩΣ_ΑΝ Γ2 > Γ3 ΤΟΤΕ
ΓΡΑΨΕ Γ2
ΑΛΛΙΩΣ
ΓΡΑΨΕ Γ3
ΤΕΛΟΣ_ΑΝ
Τέλος ΓΙΝ5ΜΑΧ
ΑΣΚΗΣΗ ΜΕΓΙΣΤΟ ΓΙΝΟΜΕΝΟ 2
Να φτιαξετε αλγόριθμο που διαβάσει άγνωστο πλήθος πραγματικών αριθμών (η εισαγωγή θα σταματάει όταν διαβαστεί το μηδέν) και θα εμφανιζει το μεγιστο γινομενο που μπορουμε να παρουμε αν πολλαπλασιασουμε μεταξυ τους 5 αριθμούς από αυτούς που διαβάστηκαν.
Η λυση του Πετρου ειναι ολοσωστη!!μπορει να υπαρχουν και αρνητικοι αριθμοι στον πινακα.η λυση λοιπον ειναι ολοσωστη απλα δεν ειναι ευελικτη.αν πχ δωσουμε εναν πινακα ακεραιων ενος εκατομμυριου θεσεων Α[1000000] και θελω να βρω το μεγιστο γινομενο που παιρνω αν πολλαπλασιασω μαζι 300001 στοιχεια του πινακα τοτε η λυση αυτη δε δουλευει
Αλγόριθμος ΓΙΝ5ΜΑΧ
ΠΠ ← 6 ! ΠΛΗΘΟΣ ΣΤΟΙΧΕΙΩΝ ΠΙΝΑΚΑ
ΠΓ ← 3 ! ΠΛΗΘΟΣ ΠΑΡΑΓΟΝΤΩΝ
!ΕΙΣΑΓΩΓΗ ΑΡΙΘΜΩΝ
ΓΡΑΨΕ "ΑΡΧΙΚΟΣ ΠΙΝΑΚΑΣ:"
ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ ΠΠ
Π[Ι] ← ΤΥΧΑΙΟΣ_ΑΚΕΡΑΙΟΣ(-10,10)
ΓΡΑΨΕ Π[Ι]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
!ΤΑΞΙΝΟΜΗΣΗ ΦΘΙΝΟΥΣΑ
ΓΙΑ Ι ΑΠΟ 2 ΜΕΧΡΙ ΠΠ
ΓΙΑ Ξ ΑΠΟ ΠΠ ΜΕΧΡΙ Ι ΜΕ_ΒΗΜΑ -1
ΑΝ Π[Ξ-1] < Π[Ξ] ΤΟΤΕ
Τ ← Π[Ξ-1]
Π[Ξ-1] ← Π[Ξ]
Π[Ξ] ← Τ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ ""
ΓΡΑΨΕ "ΤΑΞΙΝΟΜΗΜΕΝΟΣ ΠΙΝΑΚΑΣ:"
ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ ΠΠ
ΓΡΑΨΕ Π[Ι]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ ""
ΓΡΑΨΕ "ΜΕΓΙΣΤΟ ΓΙΝΟΜΕΝΟ: "
ΑΝ ΠΓ MOD 2 = 0 ΤΟΤΕ
Γ ← 1
Κ ← 1
ΑΛΛΙΩΣ
Γ ← Π[1]
Κ ← 2
ΤΕΛΟΣ_ΑΝ
Λ ← ΠΠ
ΓΙΑ Ι ΑΠΟ Κ ΜΕΧΡΙ ΠΓ ΜΕ_ΒΗΜΑ 2
ΑΝ Π[Κ]*Π[Κ+1] > Π[Λ]*Π[Λ-1] ΤΟΤΕ
Γ ← Γ * Π[Κ]*Π[Κ+1]
Κ ← Κ + 2
ΑΛΛΙΩΣ
Γ ← Γ * Π[Λ]*Π[Λ-1]
Λ ← Λ - 2
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ Γ
Τέλος ΓΙΝ5ΜΑΧ
Δεν χρειαζόταν να είναι ευέλικτη. Δεν το έλεγε η άσκηση! ???
Ο παρακάτω αλγόριθμος είναι παντως γενικότερος.... ::)Κώδικας: [Επιλογή]Αλγόριθμος ΓΙΝ5ΜΑΧ
ΠΠ ← 6 ! ΠΛΗΘΟΣ ΣΤΟΙΧΕΙΩΝ ΠΙΝΑΚΑ
ΠΓ ← 3 ! ΠΛΗΘΟΣ ΠΑΡΑΓΟΝΤΩΝ
!ΕΙΣΑΓΩΓΗ ΑΡΙΘΜΩΝ
ΓΡΑΨΕ "ΑΡΧΙΚΟΣ ΠΙΝΑΚΑΣ:"
ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ ΠΠ
Π[Ι] ← ΤΥΧΑΙΟΣ_ΑΚΕΡΑΙΟΣ(-10,10)
ΓΡΑΨΕ Π[Ι]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
!ΤΑΞΙΝΟΜΗΣΗ ΦΘΙΝΟΥΣΑ
ΓΙΑ Ι ΑΠΟ 2 ΜΕΧΡΙ ΠΠ
ΓΙΑ Ξ ΑΠΟ ΠΠ ΜΕΧΡΙ Ι ΜΕ_ΒΗΜΑ -1
ΑΝ Π[Ξ-1] < Π[Ξ] ΤΟΤΕ
Τ ← Π[Ξ-1]
Π[Ξ-1] ← Π[Ξ]
Π[Ξ] ← Τ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ ""
ΓΡΑΨΕ "ΤΑΞΙΝΟΜΗΜΕΝΟΣ ΠΙΝΑΚΑΣ:"
ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ ΠΠ
ΓΡΑΨΕ Π[Ι]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ ""
ΓΡΑΨΕ "ΜΕΓΙΣΤΟ ΓΙΝΟΜΕΝΟ: "
ΑΝ ΠΓ MOD 2 = 0 ΤΟΤΕ
Γ ← 1
Κ ← 1
ΑΛΛΙΩΣ
Γ ← Π[1]
Κ ← 2
ΤΕΛΟΣ_ΑΝ
Λ ← ΠΠ
ΓΙΑ Ι ΑΠΟ Κ ΜΕΧΡΙ ΠΓ ΜΕ_ΒΗΜΑ 2
ΑΝ Π[Κ]*Π[Κ+1] > Π[Λ]*Π[Λ-1] ΤΟΤΕ
Γ ← Γ * Π[Κ]*Π[Κ+1]
Κ ← Κ + 2
ΑΛΛΙΩΣ
Γ ← Γ * Π[Λ]*Π[Λ-1]
Λ ← Λ - 2
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ Γ
Τέλος ΓΙΝ5ΜΑΧ
1. Αρχικά θα πρέπει να εξαιρεθούν οι μηδενικές τιμές
2. Μετά μπορεί κανείς να αλλάζει τους ακέραιους σε θετικούς, αφαιρώντας τον μικρότερο αρνητικό συν ένα στο καθένα. Έτσι έχει να κάνει με γινόμενα θετικών.
πχ τα α,β γ θα γίνουν α-δ+1, β-δ+1, γ-δ+1, όπου το δ είναι ο μικρότερος αρνητικός (αν δεν υπάρχει αρνητικός τότε είναι 0)
αν το γινόμενο (α-δ+1)*(β-δ+1) είναι μεγαλύτερο από το (α-δ+1)*(γ-δ+1) τότε θα πρέπει τα
(β-δ+1)>(γ-δ+1) ή β>γ. Άρα πρακτικά και χωρίς την αλλαγή σε θετικούς, θα έχουμε την ανισότητα β>γ ή α*β>α*γ να ισχύει.
στο παράδειγμα με τους -10, -3, -5, -6, -20
έχουμε τα -10--20+1=11, -3--20+1=18, -5--20+1=16, -6--20+1=15, -20--20+1=1
ταξινομούμε και παίρνουμε τα μέγιστα τρία: 18, 16, 15 από τα -3, -5 και -6, και έτσι καταλήγουμε σε αυτά τα νούμερα. που δίνουν το -90 ως μέγιστο γινόμενο.
Όπως το βλέπω και χωρίς την αφαίρεση του μικρότερου αρνητικού συν ένα, πάλι με απλή ταξινόμηση παίρνουμε τους τρεις μέγιστους και έχουμε το μεγαλύτερο γινόμενο.
ΤΡΟΜΕΡΗ ΑΣΚΗΣΗ(καταλληλη και για μαθητες)Ωραίες ασκήσεις, πράγματι Κώστα, για σπαζοκεφαλιές και όχι για πανελλήνιες
https://practice.geeksforgeeks.org/problems/sorting-elements-of-an-array-by-frequency/0
Δινεται ενας πινακας ακεραιων 100 θεσεων.ταξινομηστε τον ως προς την συχνοτητα των στοιχειων του ως εξης:
1)το στοιχειο που υπαρχει περισσοτερες φορες στον πινακα μπαινει πρωτο και αυτο που υπαρχει τις λιγοτερες τελευταιο.
2)αν 2 η περισσοτεροι αριθμοι εχουν την ιδια συχνοτητα ταξινομουνται κατα αυξουσα σειρα δλδ πρωτος μπαινει ο μικροτερος
ΔΙΑΔΙΚΑΣΙΑ add(x, A, F, M)
! x το στοιχείο που θα εισαχθεί στον Α
! F οι αντίστοιχες συχνότητες
! Μ το πλήθος των στοιχείων ως τώρα μέσα στον Α
ΣΤΑΘΕΡΕΣ
N = 10
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: A[N], x, F[N], M , i
ΛΟΓΙΚΕΣ: found
ΑΡΧΗ
! αναζητώ το x μέσα στον Α
i <- 1
found <- ΨΕΥΔΗΣ
ΟΣΟ i<=M ΚΑΙ ΟΧΙ found ΕΠΑΝΑΛΑΒΕ
ΑΝ A[i]=x ΤΟΤΕ
found <- ΑΛΗΘΗΣ
ΑΛΛΙΩΣ
i <- i+1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΝ found ΤΟΤΕ ! αν το βρήκε, προσθέτει 1 στη συχνότητά του
F[i] <- F[i]+1
ΑΛΛΙΩΣ ! αλλιώς το εισάγει ως νέο, με μία παρουσία
M <- M+1
A[M]<-x
F[M]<-1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
ΑΣΚΗΣΗ ΜΕΓΙΣΤΟ ΓΙΝΟΜΕΝΟ
Δινεται πινακας ακεραιων 20 θεσεων Α[20].να φτιαξετε προγραμμα σε γλωσσα που θα εμφανιζει το μεγιστο γινομενο που μπορουμε να παρουμε αν πολλαπλασιασουμε μεταξυ τους 5 στοιχεια του πινακα.(θελω πολυ να δω καποιον να τη λυνει αυτη την ασκηση με τιμιο τροπο)
Η πιο προφανής λύση σε Ο(Ν) είναι να χρησιμοποιηθεί ένας άλλος πίνακας Συχνότητες[1..99], αρχικοποιημένος σε 0, και σαρώνοντας τον Α να αυξάνουμε το Συχνότητες[Α[ι]] κατά 1. Και σταματάμε την πρώτη φορά που κάποιο στοιχείο του φτάσει στο 2.
Τώρα αν για κάποιο λόγο θέλουμε μαζοχιστικά να αποφύγουμε δεύτερο πίνακα, μπορούμε να χρησιμοποιήσουμε τον ίδιο τον Α σαν να ήταν δύο πίνακες. Π.χ. αντί να προσθέτουμε "1" στον πίνακα Συχνότητες, να προσθέτουμε "256ρια" στον πίνακα Α, ώστε το "high byte" του κάθε στοιχείου του Α να μετράει συχνότητες και το "low byte" να συνεχίζει να κρατάει τους αριθμούς. Και αφού τελειώσουμε, πάλι σε Ο(Ν), μηδενίζουμε τα "high bytes" για να αφήσουμε τον πίνακα Α όπως τον βρήκαμε.
Άρα τελικά χρησιμοποιείται μόνο ένας μετρητής ι.
Εναλλακτικά αντί για το high byte μπορεί να χρησιμοποιηθεί το πρόσημο των στοιχείων του Α.
Κώστα μήπως δεν έχεις γράψει ολοκληρωμένα την εκφώνηση; Μήπως λέει ότι τα περιεχόμενα του πίνακα είναι συγκεκριμένα όλοι οι ακέραιοι από το 1 ως το 99 (προφανώς ανακατεμένοι), συν έναν ακόμα που εμφανίζεται δύο φορές;
Αν ναι, τότε μπορείς να βρεις ποιος εμφανίζεται δύο φορές σε Ο(Ν) χρόνο και Ο(1) χώρο και χωρίς να πειράξεις καθόλου τον πίνακα, βρίσκοντας το άθροισμα και των 100 στοιχείων και αφαιρώντας το άθροισμα 1+...+99.
Στείλε το link με την εκφώνηση, προς το παρόν πιστεύω ότι κάτι έχεις μεταφέρει λάθος.
https://www.quora.com/How-can-I-find-a-duplicate-element-in-an-array-with-a-time-complexity-less-than-O-n-2-and-a-space-complexity-of-O-1
https://en.wikipedia.org/wiki/Cycle_detection#Floyd's_Tortoise_and_Hare
Γιατί καλέ δεν δουλεύει; Απλά η ερώτηση είναι "παγίδα" με την έννοια ότι σου ζητάνε τον συγκεκριμένο αλγόριθμο κι αν δεν τον ξέρεις την έκατσες. Δεν νομίζω ότι γίνεται να ανακαλύψεις αλγόριθμο για paper ενώ πας να λύσεις μια άσκηση με προθεσμία 2λεπτου...
https://csacademy.com/submission/1198745/
https://csacademy.com/submission/1203016/
κλπ κλπ, δηλαδή εκτός από τις λάθος λύσεις υπάρχουν και αρκετές σωστές που χρησιμοποιούν τον Floyd.
Είναι ξεκάθαρα Ο(Ν) time και O(1) space, διάβασέ τον...