Cerința
Se dă un număr natural n
. Asupra lui se efectuează t
serii de transformări, o serie constând în m
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 t
serii de transformări.
Date de intrare
Programul citește de la tastatură numerele n
, t
și m
, iar apoi m
perechi de numere naturale, separate prin spații, fiecare pereche reprezentând pozițiile cifrelor care se interschimbă.
Date de ieșire
Programul va afișa pe ecran numărul obținut în urma efectuării celor t
serii de transformări.
Restricții și precizări
1 ≤ n < 1.000.000.000
1 ≤ t ≤ 2.000.000.000
1 ≤ m ≤ 10
- prima cifră din scrierea lui
n
se află pe poziția1
- numerele din cele
m
perechi reprezentând pozițiile cifrelor care se interschimbă sunt mai mici sau egale cu numărul cifrelor luin
- cifra
0
nu va ajunge pe prima poziţie în urma unei interschimbări
Exemplu
Intrare
1234 2 22 41 4
Ieșire
4132
Explicație
Se efectuează prima serie de transformări: 1234 → 1432 → 2431
A doua serie de transformări: 2431 → 2134 → 4132
#include <bits/stdc++.h> using namespace std; int n , t , m , k , sab , p , nr , j , u , l , pi , pj , ci , cj , suma , prod , c , pc , r , i , a ; int main() { cin >> n >> t >> m ; k = n ; p = 0 ; sab = 0 ; while(k != 0) { k = k / 10 ; p++ ; sab = sab * 10 + p ; } for(k = 1 ; k <= m ; k++) { cin >> i >> j ; if(i > j) { u = i ; i = j ; j = u ; } pi = 1; pj = 1; for(l = 1 ; l <= p - i ; l++) pi = pi * 10 ; for(l = 1 ; l <= p - j ; l++) pj = pj * 10 ; ci = ( sab / pi ) % 10 ; cj = ( sab / pj ) % 10 ; sab = sab - ci * pi ; sab = sab - cj * pj ; sab = sab + cj * pi ; sab = sab + ci * pj ; } k = 0 ; nr = n ; do { k++ ; a = sab ; suma = 0 ; prod = 1 ; while ( a != 0 ) { r= a % 10 ; pc = 1 ; for( i = 1 ; i <= p - r ; i++ ) pc = pc * 10 ; c = ( nr / pc ) % 10 ; suma = suma + c * prod ; prod = prod * 10 ; a = a / 10 ; } nr = suma ; }while( nr != n); t = t % k ; nr = n ; for ( i = 1 ; i <= t ; i++ ) { a = sab ; suma = 0 ; prod = 1 ; while ( a != 0 ) { r= a % 10 ; pc = 1 ; for( j = 1 ; j <= p - r ; j++ ) pc = pc * 10 ; c = ( nr / pc ) % 10 ; suma = suma + c * prod ; prod = prod * 10 ; a = a / 10 ; } nr = suma ; } cout << nr ; return 0; }