1059 - Schimb Cifre
Sursă: [1]
Cerinţa
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
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
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
- 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
- Intrare
- 1234 2 2
- 2 4
- 1 4
- Ieșire
- Datele introduse sunt corecte.
- 4132
Explicație
Se efectuează prima serie de transformări: 1234 → 1432 → 2431 A doua serie de transformări: 2431 → 2134 → 4132
Rezolvare
<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>