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
1550 - DivFactorial
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/1550/divfactorial 1550 - DivFactorial] ---- == Cerinţa == Se da un vector cu '''n''' elemente. Sa se afișeze pe ecran elementele din vector care divid factorialul numărului de elemente '''n'''. == Date de intrare == Programul citește de la tastatură numărul '''n''', iar apoi '''n''' numere naturale, separate prin spații. == 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 va afișa pe ecran elementele din vector care divid factorialul numărului de elemente n. Î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''' ⩽ 12 * cele '''n''' numere citite vor fi mai mici decât '''1.000.000''' * pentru toate testele va exista cel puțin un element al vectorului care divide '''n!''' == Exemple == ===Exemplul 1=== ; Intrare : 5 : 16 3 71 30 25 ; Ieșire : Datele sunt introduse corect. : 3 30 ===Explicație exemplul 1=== : Factorialul numărului de elemente '''n''' este '''120'''. Elementele din vector care îl divid pe '''120''' sunt '''3''' și '''30'''. ===Exemplul 2=== ; Intrare : 13 : 1 2 3 4 5 6 7 8 9 10 11 12 13 ; Ieșire : Datele nu corespund restricțiilor impuse. <br> == Rezolvare == <syntaxhighlight lang="python" line> # 1550 DivFactorial def factorial(n): if n == 0 or n == 1: return 1 else: return n * factorial(n-1) def afis_elem_div_cu_n_factorial(vector): factorial_n = factorial(n) elemente_divizibile = [] for element in vector: if factorial_n % element == 0: elemente_divizibile.append(element) print(' '.join(map(str, elemente_divizibile))) def citire_conform_restrictiilor(n, vector): if n < 1 or n > 12: print("Datele nu corespund restricțiilor impuse.") exit() for element in vector: if element >= 1000000: print("Datele nu corespund restricțiilor impuse.") exit() if n != len(vector): print("Datele nu corespund restricțiilor impuse.") exit() print("Datele sunt introduse corect.") if __name__ == '__main__': n = int(input()) vector = list(map(int, input().split())) citire_conform_restrictiilor(n, vector) afis_elem_div_cu_n_factorial(vector) </syntaxhighlight> == Explicație rezolvare == În blocul '''if __name__ == '__main__' ''': se efectuează citirea de la tastatură a valorilor pentru n și vector (liniile 34, 35), apoi se apelează funcția citire_conform_restrictiilor() pentru a verifica conformitatea datelor introduse cu restricțiile impuse. Apoi, se apelează funcția afis_elem_div_cu_n_factorial() pentru a calcula și afișa elementele din vector care divid factorialul numărului n citit.<br> Funcția '''factorial(n)''' primește un argument n și calculează factorialul acestuia folosind o implementare recursivă. Dacă n este 0 sau 1, se returnează 1, altfel se returnează n multiplicat cu factorialul lui n-1. Aceasta este o implementare obișnuită a formulei matematice pentru factorial.<br> Funcția '''afis_elem_div_cu_n_factorial(vector)''' primește ca argument un vector de numere și calculează factorialul numărului n citit anterior (presupus a fi definit global), apoi parcurge vectorul de numere și afișează elementele care divid acest factorial. Elementele care divid factorialul sunt adăugate într-o listă elemente_divizibile utilizând un loop for și operatorul de modulo % pentru a verifica dacă un număr este divizibil cu factorialul calculat. La final, lista de elemente este afișată utilizând funcția print(), metoda join() pentru a le separa prin spații și funcția map() pentru a le converti în string-uri.<br> Funcția '''citire_conform_restrictiilor(n, vector)''' primește ca argumente n și vector și verifică dacă valorile acestora sunt conforme cu restricțiile impuse de problema. Dacă n nu se află în intervalul [1, 12], sau cel puțin un element din vector este mai mare sau egal cu 1.000.000, sau numărul de elemente din vector nu este egal cu n, atunci se afișează "Datele nu corespund restricțiilor impuse.". și se încheie execuția programului utilizând funcția exit(). Altfel, se afișează "Datele sunt introduse corect." și se continuă programul conform main-ului.
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