1059 - Schimb Cifre: Difference between revisions
Pagină nouă: Sursă: [https://www.pbinfo.ro/probleme/1059/schimbcifre] == Cerinţa == Se dă un număr natural '''numar'''. Asupra lui se efectuează '''serii_transformari''' serii de transformări, o serie constând în '''interschimbari''' transformări de genul: cifra de pe poziția i se interschimbă cu cifra de pe poziția j. Să se afişeze numărul obţinut după efectuarea celor '''serii_transformari''' serii de transformări. == Date de intrare == Programul citește de la tastat... |
No edit summary |
||
Line 2: | Line 2: | ||
== Cerinţa == | == Cerinţa == | ||
Se dă un număr natural ''' | Se dă un număr natural '''n'''. Asupra lui se efectuează '''s''' serii de transformări, o serie constând în '''t''' transformări de genul: cifra de pe poziția '''i''' se interschimbă cu cifra de pe poziția '''j'''. Să se afişeze numărul obţinut după efectuarea celor '''s''' serii de transformări. | ||
== Date de intrare == | == Date de intrare == | ||
Programul citește de la tastatură numerele ''' | Programul citește de la tastatură numerele '''n''', '''s''' și '''t''', iar apoi '''t''' perechi de numere naturale, separate prin spații, fiecare pereche reprezentând pozițiile cifrelor care se interschimbă. | ||
== Date de ieşire == | == Date de ieşire == | ||
Dacă datele introduse sunt corecte, pe ecran se va afișa '''"Datele introduse sunt corecte."''', apoi programul va afișa pe ecran numărul obținut în urma efectuării celor '''s''' serii de transformări. În caz contrar, se va afișa pe ecran mesajul '''"Datele introduse nu sunt corecte."'''. | |||
== Restricții și precizări == | == Restricții și precizări == | ||
* ''' 1 ⩽ | * ''' 1 ⩽ n ⩽ 1.000.000.000 ''' | ||
* ''' 1 ⩽ | * ''' 1 ⩽ s ⩽ 2.000.000.000''' | ||
* ''' 1 ⩽ | * ''' 1 ⩽ t ⩽ 10 ''' | ||
* prima cifră din scrierea lui ''' | * prima cifră din scrierea lui '''n''' se află pe poziția 1 | ||
* numerele din cele ''' | * numerele din cele '''t''' perechi reprezentând pozițiile cifrelor care se interschimbă sunt mai mici sau egale cu numărul cifrelor lui '''n''' | ||
* cifra '''0''' nu va ajunge pe prima poziţie în urma unei interschimbări | * cifra '''0''' nu va ajunge pe prima poziţie în urma unei interschimbări | ||
Line 21: | Line 21: | ||
: 1 4 | : 1 4 | ||
; Ieșire | ; Ieșire | ||
: Datele introduse sunt corecte. | |||
: 4132 | : 4132 | ||
Line 30: | Line 31: | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
#1059 | |||
from typing import List, Tuple | |||
# Funcție de verificare a datelor conform restricțiilor | |||
def verificare_date(n: int, s: int, t: int, interschimbari: List[Tuple[int, int]]) -> bool: | |||
# Verificare restricție n | |||
if n < 1 or n > 1000000000: | |||
return False | |||
# Verificare restricție s | |||
if s < 1 or s > 2000000000: | |||
return False | |||
if | # Verificare restricție t | ||
if t < 1 or t > 10: | |||
return False | |||
# Verificare restricție interschimbari | |||
for i, j in interschimbari: | |||
if i < 1 or i > len(str(n)) or j < 1 or j > len(str(n)): | |||
return False | |||
return True | |||
# Funcție pentru interschimbarea cifrelor la pozițiile i și j într-un număr | |||
def interschimbare_cifre(numar: int, i: int, j: int) -> int: | |||
cifre = [int(cifra) for cifra in str(numar)] | |||
cifre[i-1], cifre[j-1] = cifre[j-1], cifre[i-1] | |||
return int("".join(map(str, cifre))) | |||
# Funcția main | |||
if __name__ == "__main__": | |||
# Citire date de intrare | |||
n, s, t = map(int, input("Introduceti datele separate prin spatii: ").split()) | |||
interschimbari = [] | |||
for i in range(t): | |||
i, j = map(int, input("Introduceti datele separate prin spatii: ").split()) | |||
interschimbari.append((i, j)) | |||
# Verificare date de intrare | |||
if not verificare_date(n, s, t, interschimbari): | |||
print("Datele introduse nu sunt corecte.") | |||
exit() | |||
# Efectuare serii de transformări | |||
for k in range(s): | |||
for i, j in interschimbari: | |||
if i > j: | |||
i, j = j, i | |||
n = interschimbare_cifre(n, i, j) | |||
# Afișare rezultat | |||
print("Datele introduse sunt corecte.") | |||
print(n) | |||
print( | |||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 18:54, 28 April 2023
Sursă: [1]
Cerinţa[edit | edit source]
Se dă un număr natural n. Asupra lui se efectuează s serii de transformări, o serie constând în t transformări de genul: cifra de pe poziția i se interschimbă cu cifra de pe poziția j. Să se afişeze numărul obţinut după efectuarea celor s serii de transformări.
Date de intrare[edit | edit source]
Programul citește de la tastatură numerele n, s și t, iar apoi t perechi de numere naturale, separate prin spații, fiecare pereche reprezentând pozițiile cifrelor care se interschimbă.
Date de ieşire[edit | edit source]
Dacă datele introduse sunt corecte, pe ecran se va afișa "Datele introduse sunt corecte.", apoi programul va afișa pe ecran numărul obținut în urma efectuării celor s serii de transformări. În caz contrar, se va afișa pe ecran mesajul "Datele introduse nu sunt corecte.".
Restricții și precizări[edit | edit source]
- 1 ⩽ n ⩽ 1.000.000.000
- 1 ⩽ s ⩽ 2.000.000.000
- 1 ⩽ t ⩽ 10
- prima cifră din scrierea lui n se află pe poziția 1
- numerele din cele t perechi reprezentând pozițiile cifrelor care se interschimbă sunt mai mici sau egale cu numărul cifrelor lui n
- cifra 0 nu va ajunge pe prima poziţie în urma unei interschimbări
Exemplu[edit | edit source]
- Intrare
- 1234 2 2
- 2 4
- 1 4
- Ieșire
- Datele introduse sunt corecte.
- 4132
Explicație[edit | edit source]
Se efectuează prima serie de transformări: 1234 → 1432 → 2431 A doua serie de transformări: 2431 → 2134 → 4132
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 1059
from typing import List, Tuple
- Funcție de verificare a datelor conform restricțiilor
def verificare_date(n: int, s: int, t: int, interschimbari: List[Tuple[int, int]]) -> bool:
# Verificare restricție n if n < 1 or n > 1000000000: return False
# Verificare restricție s if s < 1 or s > 2000000000: return False
# Verificare restricție t if t < 1 or t > 10: return False
# Verificare restricție interschimbari for i, j in interschimbari: if i < 1 or i > len(str(n)) or j < 1 or j > len(str(n)): return False
return True
- Funcție pentru interschimbarea cifrelor la pozițiile i și j într-un număr
def interschimbare_cifre(numar: int, i: int, j: int) -> int:
cifre = [int(cifra) for cifra in str(numar)] cifre[i-1], cifre[j-1] = cifre[j-1], cifre[i-1] return int("".join(map(str, cifre)))
- Funcția main
if __name__ == "__main__":
# Citire date de intrare n, s, t = map(int, input("Introduceti datele separate prin spatii: ").split())
interschimbari = [] for i in range(t): i, j = map(int, input("Introduceti datele separate prin spatii: ").split()) interschimbari.append((i, j))
# Verificare date de intrare if not verificare_date(n, s, t, interschimbari): print("Datele introduse nu sunt corecte.") exit()
# Efectuare serii de transformări for k in range(s): for i, j in interschimbari: if i > j: i, j = j, i n = interschimbare_cifre(n, i, j)
# Afișare rezultat print("Datele introduse sunt corecte.") print(n)
</syntaxhighlight>