4255 - Rotire Secvente
Cerința[edit | edit source]
Se dă un vector cu n
elemente, numere naturale, și un număr k
, divizor al lui n
. Se împarte vectorul în k
secvențe disjuncte, numerotate de la 1
la k
. Să se permute circular cu o poziție spre stânga elementele din fiecare dintre cele k
secvențe și să se afișeze pe ecran vectorul rezultat în urma acestor modificări.
Se vor defini și apela următoarele subprograme:
citire
, care citește de la tastatură valoarea luin
, a luik
și celen
elemente ale tablouluiafisare
, care afișează pe ecran elementele tabloului, separate prin exact un spațiupermutare
, care permută circular cu o poziție spre stânga elementele unei secvențe din tablou precizata prin cele două extremitățist
șidr
.
În programele C/C++ nu se vor folosi variabile globale.
Date de intrare[edit | edit source]
Programul citește de la tastatură numerele n
și k
, iar apoi n
numere naturale, reprezentând elementele vectorului.
Date de ieșire[edit | edit source]
Se vor afișa pe ecran elementele tabloului după modificarea cerută, separate prin exact un spațiu.
Restricții și precizări[edit | edit source]
1 ≤ k < n ≤ 1000
,k
este divizor al luin
- cele
n
numere citite vor fi mai mici decât1000
Exemplul 1[edit | edit source]
Input:
15 5
3 6 4 7 6 6 6 4 6 7 6 6 4 4 5
Output:
6 4 3 6 6 7 4 6 6 6 6 7 4 5 4
Explicație:
Vectorul se împarte în 5
secvențe: (3 6 4)
, (7 6 6)
, (6 4 6)
, (7 6 6)
și (4 4 5)
. Elementele din fiecare dintre ele se permută circular cu o poziție spre stânga și se obține secvențele (6 4 3)
, (6 6 7)
, (4 6 6)
, (6 6 7)
și (4 5 4)
.
Exemplul 2[edit | edit source]
Input:
15 76
3 6 4 7 6 6 6 4 6 7 6 6 4 4 5
Output:
Restricții neîndeplinite.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python3" line="1"> def validate_input(n, k, vector):
if not (1 < k < n <= 1000) or any(x >= 1000 for x in vector): print("Restricții neîndeplinite.") return False if n % k != 0: print("k trebuie să fie divizor al lui n.") return False return True
def citire():
n = int(input("Introduceți n: ")) k = int(input("Introduceți k: ")) vector = list(map(int, input().split())) return n, k, vector
def afisare(vector):
print(" ".join(map(str, vector)))
def permutare(st, dr, vector):
lungime = dr - st + 1 temp = vector[st:dr + 1] for i in range(st, dr + 1): vector[i] = temp[(i - st - 1) % lungime]
def main():
n, k, vector = citire()
# Verificare validitate input if not validate_input(n, k, vector): return
# Afisare vector initial print("Vectorul initial:") afisare(vector)
# Permutare si afisare vector modificat for _ in range(k): for i in range(1, k + 1): st = (i - 1) * (n // k) dr = i * (n // k) - 1 permutare(st, dr, vector)
print("Vectorul dupa permutari:") afisare(vector)
if __name__ == "__main__":
main()
</syntaxhighlight>