1059 - Schimb Cifre
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>