3074 - Numeres: Difference between revisions

From Bitnami MediaWiki
Sinn Erich (talk | contribs)
Sinn Erich (talk | contribs)
 
(11 intermediate revisions by the same user not shown)
Line 1: Line 1:
Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]
Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]
== Cerinţa ==
== Cerinţa ==
Scrieți un program care să afișeze, în ordine crescătoare, toate numerele naturale formate din câte '''n''' cifre și care au suma cifrelor egală cu '''s''', precum și câte astfel de numere există.
Scrieți un program care să afișeze, în ordine crescătoare, toate numerele naturale formate din câte '''numere''' cifre și care au suma cifrelor egală cu '''suma''', precum și câte astfel de numere există.


== Date de intrare ==
== Date de intrare ==
Programul citește de la tastatură numerele naturale '''n și s''', separate prin spații.
Programul citește de la tastatură numerele naturale '''numere și suma''', separate prin spații.


== Date de ieșire ==  
== Date de ieșire ==  
Line 14: Line 14:


== Restricţii şi precizări ==
== Restricţii şi precizări ==
1 ≤ '''n''' ≤ 7
1 ≤ '''numere''' ≤ 7
1 ≤ '''s''' ≤ 63
1 ≤ '''suma''' ≤ 63


== Exemplul 1 ==
== Exemplul 1 ==
; Intrare
; Datele de intrare
: Numerele  si Suma, separate prin spatiu sunt:
: 2 5
: 2 5
; Ieșire
; Datele de ieșire
: Datele sunt introduse corect.
: 14 23 32 41 50
: 14 23 32 41 50
: 5
: 5
Line 28: Line 30:
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
#3074
#3074
def find_numbers(n, s):
def find_numbers(numere, suma):
     found_numbers = []
     found_numbers = []
     for num in range(10**(n-1), 10**n):
     for num in range(10**(numere-1), 10**numere):
         if sum(int(digit) for digit in str(num)) == s:
         if sum(int(digit) for digit in str(num)) == suma:
             found_numbers.append(num)
             found_numbers.append(num)
     return found_numbers
     return found_numbers
Line 43: Line 45:


if __name__ == '__main__':
if __name__ == '__main__':
     n, s = map(int, input().split())
     numere, suma = map(int, input("Numerele  si Suma, separate prin spatiu sunt:").split())
     if n < 1 or n > 7 or s < 1 or s > 63:
     if numere < 1 or numere > 7 or suma < 1 or suma > 63:
         print("Datele nu corespund restricțiilor impuse.")
         print("Datele nu corespund restricțiilor impuse.")
     else:
     else:
         print("Datele sunt introduse corect.")
         print("Datele sunt introduse corect.")
         numbers = find_numbers(n, s)
         numbers = find_numbers(numere, suma)
         print_numbers(numbers)
         print_numbers(numbers)


Line 56: Line 58:
'''Explicatie cod:'''
'''Explicatie cod:'''


Funcția find_numbers(n, s) primește ca parametri doi întregi, n și s. Scopul acestei funcții este de a găsi toate numerele cu n cifre astfel încât suma cifrelor acestora să fie egală cu s.
Funcția find_numbers(numere, suma) primește ca parametri doi întregi, numere și suma. Scopul acestei funcții este de a găsi toate numerele cu n cifre astfel încât suma cifrelor acestora să fie egală cu suma.


Funcția inițializează o listă goală pentru a adăuga numerele care respectă condiția dată. Apoi, cu ajutorul unei bucle for, se parcurg toate numerele de n cifre. Aceste numere sunt generate cu ajutorul funcției range(10**(n-1), 10**n). Pentru fiecare număr generat, se calculează suma cifrelor acestuia și se compară cu s. Dacă suma cifrelor este egală cu s, numărul respectiv este adăugat în lista found_numbers. La final, funcția returnează lista cu numerele găsite.
Funcția inițializează o listă goală pentru a adăuga numerele care respectă condiția dată. Apoi, cu ajutorul unei bucle for, se parcurg toate numerele de n cifre. Aceste numere sunt generate cu ajutorul funcției range(10**(numere-1), 10**numere). Pentru fiecare număr generat, se calculează suma cifrelor acestuia și se compară cu suma. Dacă suma cifrelor este egală cu suma, numărul respectiv este adăugat în lista found_numbers. La final, funcția returnează lista cu numerele găsite.


Funcția print_numbers(found_numbers) primește lista found_numbers și afișează numerele găsite. Dacă lista este goală, se afișează valoarea 0. În caz contrar, numerele sunt afișate folosind operatorul * pentru a transforma lista în argumente separate și se afișează și lungimea listei.
Funcția print_numbers(found_numbers) primește lista found_numbers și afișează numerele găsite. Dacă lista este goală, se afișează valoarea 0. În caz contrar, numerele sunt afișate folosind operatorul * pentru a transforma lista în argumente separate și se afișează și lungimea listei.


În cadrul declarației if __name__ == '__main__', programul primește de la tastatură valorile n și s folosind funcția input(), le converteste în numere întregi folosind funcția map(int, input().split()) și le atribuie variabilelor corespunzătoare. Apoi, se verifică dacă valorile citite respectă restricțiile impuse. Dacă valorile sunt valide, se apelează funcția find_numbers(n, s) pentru a găsi numerele cu proprietatea dată și apoi se afișează numerele găsite folosind funcția print_numbers(found_numbers). Dacă valorile nu sunt valide, se afișează un mesaj de eroare.
În cadrul declarației if __name__ == '__main__', programul primește de la tastatură valorile numere și suma folosind funcția input(), le converteste în numere întregi folosind funcția map(int, input().split()) și le atribuie variabilelor corespunzătoare. Apoi, se verifică dacă valorile citite respectă restricțiile impuse. Dacă valorile sunt valide, se apelează funcția find_numbers(numere, suma) pentru a găsi numerele cu proprietatea dată și apoi se afișează numerele găsite folosind funcția print_numbers(found_numbers). Dacă valorile nu sunt valide, se afișează un mesaj de eroare.

Latest revision as of 23:45, 27 April 2023

Sursa: [1]

Cerinţa[edit | edit source]

Scrieți un program care să afișeze, în ordine crescătoare, toate numerele naturale formate din câte numere cifre și care au suma cifrelor egală cu suma, precum și câte astfel de numere există.

Date de intrare[edit | edit source]

Programul citește de la tastatură numerele naturale numere și suma, separate prin spații.

Date de ieșire[edit | edit source]

Programul va afișa numerele determinate pe prima linie a ecranului, în ordine crescătoare, separate prin câte un spațiu. Pe a doua linie va afișa numărul acestor numere. Dacă nu există astfel de numere, va afișa valoarea 0 pe prima linie a ecranului.

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", apoi pe un rând nou afișează în ordine crescătoare, toate numerele naturale formate din câte n cifre și care au suma cifrelor egală cu s, precum și câte astfel de numere există.

În caz contrar, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse."

Restricţii şi precizări[edit | edit source]

1 ≤ numere ≤ 7 1 ≤ suma ≤ 63

Exemplul 1[edit | edit source]

Datele de intrare
Numerele si Suma, separate prin spatiu sunt:
2 5
Datele de ieșire
Datele sunt introduse corect.
14 23 32 41 50
5


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 3074

def find_numbers(numere, suma):

   found_numbers = []
   for num in range(10**(numere-1), 10**numere):
       if sum(int(digit) for digit in str(num)) == suma:
           found_numbers.append(num)
   return found_numbers

def print_numbers(found_numbers):

   if len(found_numbers) == 0:
       print(0)
   else:
       print(*found_numbers)
       print(len(found_numbers))

if __name__ == '__main__':

   numere, suma = map(int, input("Numerele  si Suma, separate prin spatiu sunt:").split())
   if numere < 1 or numere > 7 or suma < 1 or suma > 63:
       print("Datele nu corespund restricțiilor impuse.")
   else:
       print("Datele sunt introduse corect.")
       numbers = find_numbers(numere, suma)
       print_numbers(numbers)


</syntaxhighlight>

Explicatie cod:

Funcția find_numbers(numere, suma) primește ca parametri doi întregi, numere și suma. Scopul acestei funcții este de a găsi toate numerele cu n cifre astfel încât suma cifrelor acestora să fie egală cu suma.

Funcția inițializează o listă goală pentru a adăuga numerele care respectă condiția dată. Apoi, cu ajutorul unei bucle for, se parcurg toate numerele de n cifre. Aceste numere sunt generate cu ajutorul funcției range(10**(numere-1), 10**numere). Pentru fiecare număr generat, se calculează suma cifrelor acestuia și se compară cu suma. Dacă suma cifrelor este egală cu suma, numărul respectiv este adăugat în lista found_numbers. La final, funcția returnează lista cu numerele găsite.

Funcția print_numbers(found_numbers) primește lista found_numbers și afișează numerele găsite. Dacă lista este goală, se afișează valoarea 0. În caz contrar, numerele sunt afișate folosind operatorul * pentru a transforma lista în argumente separate și se afișează și lungimea listei.

În cadrul declarației if __name__ == '__main__', programul primește de la tastatură valorile numere și suma folosind funcția input(), le converteste în numere întregi folosind funcția map(int, input().split()) și le atribuie variabilelor corespunzătoare. Apoi, se verifică dacă valorile citite respectă restricțiile impuse. Dacă valorile sunt valide, se apelează funcția find_numbers(numere, suma) pentru a găsi numerele cu proprietatea dată și apoi se afișează numerele găsite folosind funcția print_numbers(found_numbers). Dacă valorile nu sunt valide, se afișează un mesaj de eroare.