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
2362 - Bal Mascat
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/2362/balmascat] ---- == Cerinţa == Un grup de copii participă la un Bal Mascat. Participanții nu pot să-și aleagă singuri costumul. Organizatorii au pregătit exact atâtea costume câți copii sunt. Au ambalat costumele în cutii numerotate și le-au așezat într-o cameră. Copiii intră în camera cu costume și își aleg câte o cutie (la întâmplare). Fiind puși pe glume, organizatorii au scos încălțămintea din anumite cutii, după regula: cutia cu numărul '''p''' ramâne fără încălțări, apoi cutia cu numărul '''2*p''', apoi cutia cu numărul '''3*p''' și așa mai departe până la terminarea cutiilor. Dacă ultima cutie a rămas cu tot costumul, atunci organizatorii scot încălțămintea și din ea. După ce primesc cutiile cu costume, copiii constată că nu se pot deschide decât cu ajutorul unui cod (același la toate cutiile). Organizatorii le dau indicii despre cum să afle codul: se calculează numărul de cutii care au rămas fără încălțăminte, se află ultima cifră din acest număr (notată cu '''c'''). Apoi se formează un cod intermediar cu exact '''2*p''' cifre, astfel: dacă '''c''' are o valoare diferită de 9, atunci prima cifră (pornind de la stânga numărului) are valoarea ('''c+1'''). Dacă '''c''' are valoarea 9 atunci prima cifră este (c-1). A doua cifră are valoarea '''c'''. A treia cifră este egală cu prima, cifra a patra urmând să fie egală cu a doua și tot așa până se află toate cele '''2*p''' cifre. La final, se taie ultima cifră și ajungem la codul corect cu care se deschid cutiile.<br><br>Scrieţi un program care să îi ajute pe copii să afle codul cu care se deschid cutiile. == Date de intrare == Fișierul de intrare '''balmascat.in''' conţine pe prima linie două valori: un număr natural '''n''' ce reprezintă numărul de copii ce participă la balul mascat și un număr '''p''' ce reprezintă pasul cu care se stabilesc cutiile din care se scot încălțările. == Date de ieșire == Dacă datele sunt introduse corect, pe ecran se va afișa: '''"Datele sunt introduse corect."''', apoi fișierul de ieșire '''balmascat.out''' va conţine codul de acces cu care se deschid cutiile. În caz contrar, pe ecran se va afișa: '''"Datele nu au fost introduse corect."''' == Restricţii şi precizări == * '''11 ≤ n ≤ 10000''' * '''1 ≤ p ≤ 8'''. == Exemple == ===Exemplul 1=== ; balmascat.in : 15 3 ; Ecran : Datele sunt introduse corect. ; balmascat.out : 65656 ===Exemplul 2=== ; balmascat.in : 421 6 ; Ecran : Datele sunt introduse corect. ; balmascat.out : 21212121212 === Exemplul 3 === ; balmascat.in : 35 4 ; Ecran : Datele sunt introduse corect. ; balmascat.out : 8989898 == Rezolvare == <syntaxhighlight lang="python" line> # 2362 def verificare_date_intrare(n, p): if not (11 <= n <= 10000) or not (1 <= p <= 8): print("Datele nu au fost introduse corect.") return False print("Datele sunt introduse corect.") return True def rezolva_problema(n, p): c = str(sum(1 for i in range(1, n+1) if i % p != 0)) cifre = [(int(c)+1) % 10 if i % 2 == 0 else int(c) for i in range(2*p)] cod = "".join(str(cifre[i % len(cifre)]) for i in range(2*p)) cod_corect = cod[:-1] return cod_corect if __name__ == "__main__": with open("balmascat.in") as f: n, p = map(int, f.readline().split()) if verificare_date_intrare(n, p): cod_corect = rezolva_problema(n, p) with open("balmascat.out", "w") as f: f.write(cod_corect) </syntaxhighlight> == Explicație rezolvare == Prima funcție, '''"verificare_date_intrare(n, p)"''', primește doi parametri, '''n''' și '''p''', și verifică dacă valorile acestora se încadrează în anumite limite. Dacă valorile nu sunt în limitele specificate, afișează un mesaj de eroare și returnează False. În caz contrar, afișează un mesaj de confirmare și returnează True.<br><br>A doua funcție, '''"rezolva_problema(n, p)"''', primește, de asemenea, doi parametri, '''n''' și '''p''', și rezolvă problema specifică dată în cod. Folosind o compunere de expresii generatoare și metode str, calculează un cod de lungime fixă, în funcție de valorile parametrilor. Aceasta returnează partea din codul generat fără ultima cifră.<br><br>În secțiunea '''"if name == "main":"''', codul citeste valorile pentru '''n''' și '''p''' din fișierul '''balmascat.in'''. Dacă datele sunt corecte, se calculează '''cod_corect''' apelând funcția '''rezolva_problema(n, p)'''. Apoi, se deschide un fișier de ieșire '''balmascat.out''' și se scrie '''cod_corect''' în fișier.
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