Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Bitnami MediaWiki
Search
Search
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
3487 - Dealuri
Page
Discussion
English
Read
Edit
Edit source
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
Edit source
View history
General
What links here
Related changes
Special pages
Page information
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
Sursa: [https://www.pbinfo.ro/probleme/3658/nrtriplete NrTriplete] ---- ==Cerinţă== Fie un șir de numere oarecare. Un subșir de numere se numește deal dacă valorile din care este alcătuit sunt în ordine crescătoare. După fiecare deal urmează o prăpastie – o valoare mai mică decât precedenta – de unde poate începe un nou deal. Fiind data o secvență oarecare de numere ce se termină cu valoarea zero, să se afișeze valorile din care este alcătuit fiecare deal în ordine inversă apariției. Dupa ce s-a terminat primul deal în ordinea dorită, se va afișa al doilea, apoi al treilea, etc. ==Date de intrare== Programul va citi de la tastatură mai multe valori, până la intâlnirea valorii 0. ==Date de ieșire== Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele introduse sunt corecte!", apoi se va afișa se vor afișa dealurie în ordine inversă celei de introducere, separate prin exact un spațiu.. În cazul în care datele nu respectă restricțiile, se va afișa mesajul "Datele introduse nu sunt corecte!". ==Restricţii şi precizări== *Un deal nu are mai mult de 10.000 de elemente. *Valorile din care sunt formate dealurile sunt numere naturale nenune mai mici decât 263. ==Exemple== ===Exemplul 1=== :Intrare :Introduceti numerele separate prin spatiu: 1 2 5 3 7 2 4 8 123456789101112 4 0 :Ieșire :Datele de intrare sunt valide! :5 2 1 7 3 123456789101112 8 4 2 4 ==Rezolvare== <syntaxhighlight lang="python" line="1"> def validare(lst): for i in lst: if not i.isdigit(): print("Datele de intrare sunt invalide!") return False print("Datele de intrare sunt valide!") return True def rezolvare(lst): deals = [] deal = [] for i in lst: if i == 0: break if len(deal) == 0 or i > deal[-1]: deal.append(i) else: deals.append(deal[::-1]) deal = [i] if len(deal) > 0: deals.append(deal[::-1]) return [num for deal in deals for num in deal] def main(): lst = input("Introduceti numerele separate prin spatiu: ").split() if validare(lst): deals = rezolvare(list(map(int, lst))) print(" ".join(str(num) for num in deals)) if __name__ == '__main__': main() </syntaxhighlight> ==Explicație rezolvare== #1 Funcția de validare Funcția validare() verifică dacă datele de intrare sunt valide, adică respectă restricțiile specificate în enunțul problemei. În cazul acestei probleme, singura restricție este ca numerele să fie naturale nenule, dar și mai mici decât 2^63, deci nu am implementat o validare complexă. Dacă datele sunt valide, se afișează mesajul "Datele de intrare sunt valide!", iar funcția returnează valoarea True. Dacă datele nu sunt valide, se afișează mesajul "Datele de intrare sunt invalide!" și funcția returnează valoarea False. #2 Funcția de rezolvare Funcția rezolvare() primește un șir de numere și îl parcurge, identificând dealurile și afișându-le în ordinea cerută. Pentru aceasta, am folosit un buclă while care se execută până când se întâlnește valoarea 0 (semnificând sfârșitul șirului). În interiorul buclei, am inițializat o variabilă deal cu primul număr din șir. Apoi am parcurs șirul până am găsit o prăpastie (adica un număr mai mic decât precedenta). În momentul în care am găsit prăpastia, am afișat dealul curent în ordine inversă și am inițializat o nouă variabilă deal cu numărul găsit. După ce am parcurs întregul șir, mai rămâne de afișat ultimul deal, care nu a fost afișat în bucla while, deoarece nu a fost urmat de nicio prăpastie. #3 Funcția main Funcția main() primește input-ul de la utilizator, îl validează folosind funcția validare(), și apoi îl prelucrează folosind funcția rezolvare(). În final, afișează soluția pe o singură linie, separată prin spații.
Summary:
Please note that all contributions to Bitnami MediaWiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Bitnami MediaWiki:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Toggle limited content width