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
2446 - Numere 24
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!
== Enunț == Se consideră răsturnatul unui număr natural valoarea obținută prin parcurgerea cifrelor acestuia de la dreapta la stânga. De exemplu, răsturnatul numărului '''245''' este '''542'''. Un număr este palindrom dacă este egal cu răsturnatul său. De exemplu '''121''' este palindrom, iar numărul '''21''' nu este palindrom. Se consideră inițial șirul numerelor naturale '''0, 1, 2, 3, 4,''' … Din acest șir se elimină numerele divizibile cu 10 și, după fiecare număr care NU este palindrom, se inserează răsturnatul său. Noul șir astfel obținut va fi '''1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 21, 13, 31''', … == Cerinţa == Scrieți un program care să citească: 1. un număr natural '''n''' și să afișeze al '''n'''-lea număr eliminat din șirul inițial; 2. un număr natural '''x''' și să afișeze următoarele trei numere: '''n1''' – numărul de apariții în noul șir ale numărului obținut din '''x''' prin eliminarea ultimei sale cifre; '''n2''' – numărul de apariții în noul șir ale numărului obținut din '''x''' prin eliminarea ultimelor sale două cifre; '''n3''' – numărul de apariții în noul șir ale numărului obținut din '''x''' prin eliminarea ultimelor sale trei cifre. 3. un număr natural '''k''' și să afișeze numărul valorilor de '''k''' cifre din noul șir. == Date de intrare == Fișierul de intrare '''numere24.in''' conține pe prima linie un număr natural '''C''', care poate fi '''1''', '''2''' sau '''3'''. Pe linia a doua se găsește numărul natural '''n''', dacă '''C=1''', sau numărul natural '''x''', dacă '''C=2''' sau numărul natural '''k''', dacă '''C=3''', numerele având semnificația din enunț == Date de ieșire == Dacă datele sunt introduse corect, pe ecran se va afișa: '''"Datele sunt introduse corect."''', apoi pe un rând nou dacă valoarea lui '''C''' este '''1''', se va rezolva numai cerința '''1'''. În acest caz, în fişierul de ieşire '''numere24.out''' se va scrie al '''n'''-lea număr eliminat. Dacă valoarea lui '''C''' este '''2''', se va rezolva numai cerința '''2'''. În acest caz, în fişierul de ieşire numere24.out se vor scrie trei numere, '''n1, n2, n3''', cu semnificația din enunț, în această ordine, separate prin câte spațiu. Dacă valoarea lui '''C''' este '''3''', se va rezolva numai cerința '''3'''. În acest caz, fişierul de ieşire numere24.out va conține numărul valorilor de '''k''' cifre din noul șir . În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: '''"Datele nu corespund restricțiilor impuse."'''. == Restricţii şi precizări == * 1 ⩽ n ⩽ 2.000.000.000 * 1000 ⩽ x ⩽ 2.000.000.000 * 1 ⩽ k ⩽ 50 (1 ⩽ k ⩽ 18, pentru teste în valoare de 20 de puncte) * Pentru rezolvarea corectă a primei cerințe se acordă 10 puncte, pentru rezolvarea corectă a celei de a doua cerințe se acordă 25 de puncte, iar pentru rezolvarea corectă a celei de a treia cerințe se acordă 55 de puncte. * În concurs s-au acordat 10 puncte din oficiu. Aici se acordă 10 puncte pentru exemplele din enunț. == Exemple == ===Exemplul 1=== ; numere24.in : 1 : 2 ; numere24.out : Datele sunt introduse corect. : 10 == Explicație == '''n=2''' și al doilea număr eliminat este '''10'''. ('''C''' fiind '''1''' se rezolvă numai cerința 1) ===Exemplul 2=== ; numere24.in : 2 : 1205 ; numere24.out : Datele sunt introduse corect. : 0 2 1 == Explicație == '''x=1205''', numărul '''120''' nu apare în șir, deci '''n1=0''', '''12''' apare de două ori, deci '''n2=2''', iar '''1''' apare o singură dată, deci '''n3=1''' ('''C''' fiind '''2''' se rezolvă numai cerința 2) ===Exemplul 3=== ; numere24.in : 3 : 2 ; numere24.out : Datele sunt introduse corect. : 153 == Explicație == '''k=2''' și în noul șir sunt '''153''' de numere de câte '''2''' cifre. ('''C''' fiind '''3''' se rezolvă numai cerința '''3''') <br> == Rezolvare == <syntaxhighlight lang="python" line> def validare_numar(numar, limit): if not numar.isdigit(): return False if int(numar) < 0 or int(numar) > limit: return False return True def validare_numere(n, x, k, c): if c == 1: return validare_numar(n, 2000000000) elif c == 2: return all(validare_numar(numar, 2000000000) for numar in [x]) elif c == 3: return validare_numar(k, 50) return False def constr_sir(): sir = [str(i) for i in range(10)] for i in range(1, 10): sir.append(str(i * 10 + i)) for i in range(1, 100): for j in range(10): s = str(i) + str(j) + str(i)[::-1] sir.append(s) return sir def cerinta_1(n): sir = constr_sir() numere_eliminate = [] i = 0 while len(numere_eliminate) < n: if sir[i] not in numere_eliminate and sir[i] != sir[i][::-1]: numere_eliminate.append(sir[i]) sir[i] = sir[i][:-1] else: i += 1 return numere_eliminate[-1] def cerinta_2(x): sir = constr_sir() counts = [0, 0, 0] for i in range(len(sir)): if sir[i][-1] == x: counts[0] += 1 if len(sir[i]) >= 2 and sir[i][-2] == x // 10: counts[1] += 1 if len(sir[i]) >= 3 and sir[i][-3] == x // 100: counts[2] += 1 return counts def cerinta_3(k): sir = constr_sir() count = 0 for num in sir: if len(num) == k: count += 1 elif len(num) > k: break return count if __name__ == '__main__': with open('numere24.in', 'r') as f: c = int(f.readline().strip()) n, x, k = map(int, f.readline().split()) if validare_numere(n, x, k, c): print("Datele sunt introduse corect.") if c == 1: result = cerinta_1(n) with open('numere24.out', 'w') as f: f.write(str(result) + '\n') elif c == 2: counts = cerinta_2(x) with open('numere24.out', 'w') as f: f.write(' '.join(map(str, counts)) + '\n') elif c == 3: count = cerinta_3(k) with open('numere24.out', 'w') as f: f.write(str(count) + '\n') else: print("Datele nu corespund restricțiilor impuse.") </syntaxhighlight>
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