3119 - Impare Bac: Difference between revisions

From Bitnami MediaWiki
No edit summary
Line 7: Line 7:


==Date de intrare==   
==Date de intrare==   
Un număr natural '''n, cu '''1 ≤ n ≤ 1.000.000.000'''.
Se citește de la tastatură n număr natural '''n, cu '''1 ≤ n ≤ 1.000.000.000'''.
 


==Date de ieșire==
==Date de ieșire==

Revision as of 14:33, 6 May 2023

Cerință

Subprogramul Impare are un singur parametru, n, prin care primește un număr natural. Subprogramul înlocuiește fiecare cifră impară a lui n cu cea mai mare cifră pară strict mai mică decât ea (astfel cifra 1 se înlocuieşte cu cifra 0, cifra 3 cu cifra 2 etc.) și furnizează numărul obținut tot prin parametrul n.

Scrieți definiția completă a subprogramului.


Date de intrare

Se citește de la tastatură n număr natural n, cu 1 ≤ n ≤ 1.000.000.000.

Date de ieșire

Numărul obținut prin înlocuirea fiecărei cifre impare a lui n cu cea mai mare cifră pară strict mai mică decât ea. Rezultatul va fi returnat prin parametrul n.

Restricții de precizări

  • ≤ n ≤ 1.000.000.000
  • Numele funcției va fi Impare
  • Funcția va primi un singur parametru, numărul n, iar la finalul funcției n va avea valoarea cerută.


Exemplu

Dacă n=235690, atunci, după apel, n=224680, iar dacă n=15690, atunci, după apel, n=4680.


Important

Soluţia propusă va conţine doar definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.


Rezolvare

Rezolvare ver. 1

<syntaxhighlight lang="python" line="1" start="1">

def validare(n):

   if n < 1 or n > 1000000000:
       return False
   return True

def impare(n):

   cifre = list(str(n))
   for i in range(len(cifre)):
       if int(cifre[i]) % 2 != 0:
           cifre[i] = str(int(cifre[i]) - 1)
           j = i - 1
           while j >= 0 and int(cifre[j]) == 8:
               j -= 1
           if j >= 0:
               cifre[j] = str(int(cifre[j]) + 2)
   n = int("".join(cifre))
   return n

if __name__ == "__main__":

   n = int(input("Introduceti numarul: "))
   if validare(n):
       n = Impare(n)
       print("Numarul inlocuit: ", n)
   else:
       print("Numarul introdus nu respecta restrictiile.")


</syntaxhighlight>


Explicatii

Funcția Impare(n) primește un număr întreg n și returnează același număr, dar înlocuiește cifrele impare cu cea mai mare cifră pară, strict mai mică decât cifra impară înlocuită.

Pentru a face această înlocuire, funcția transformă numărul n într-o listă de cifre cu ajutorul funcției list(str(n)). Apoi, parcurge lista de cifre și verifică dacă fiecare cifră este impară.

Dacă cifra este impară, aceasta este înlocuită cu cea mai mare cifră pară, mai mică decât cifra impară înlocuită. Mai precis, se scade 1 din cifra impară și se caută cea mai mare cifră pară strict mai mică decât cifra impară înlocuită, parcurgând lista în sens invers.

La final, funcția reconstruiește numărul original din lista de cifre prin concatenarea acestora cu ajutorul funcției " ".join(cifre)) și transformă string-ul obținut înapoi într-un număr întreg prin intermediul funcției int().

Funcția validare(n) verifică dacă numărul n se încadrează în intervalul permis, și anume între 1 și 1000000000.

În cadrul blocului if __name__ == "__main__":, se citește un număr de la tastatură și se verifică dacă respectă restricțiile prin intermediul funcției validare(n). În caz afirmativ, se apelează funcția Impare(n) și se afișează rezultatul obținut, altfel se afișează un mesaj corespunzător.