4256 - Oglindire Secvente
Cerința
Se dă un vector cu n elemente, numere naturale, și un număr k, divizor al lui n. Se împarte vectorul in secvențe disjuncte de lungime k. Să se oglindească elementele (primul element din secvență se interschimbă cu ultimul, al doilea cu penultimul, etc.) din fiecare dintre cele n/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 celenelemente ale tablouluiafisare, care afișează pe ecran elementele tabloului, separate prin exact un spațiuoglindire, care oglindește elementele unei secvențe dinr-un vector precizate prin cele două extremitățistșidr.
În programele C/C++ nu se vor folosi variabile globale.
Date de intrare
Programul citește de la tastatură numerele n și k, iar apoi n numere naturale, reprezentând elementele vectorului.
Date de ieșire
Se vor afișa pe ecran elementele tabloului după modificarea cerută, separate prin exact un spațiu.
Restricții și precizări
1 ≤ k < n ≤ 1000,keste divizor al luin- cele
nnumere citite vor fi mai mici decât1000
Exemplul 1
Input:
15 5
3 6 4 7 6 6 6 4 6 7 6 6 4 4 5
Output:
6 7 4 6 3 7 6 4 6 6 5 4 4 6 6
Explicație:
Vectorul se împarte în 3 secvențe de lungime 5: (3 6 4 7 6), (6 6 4 6 7)și (6 6 4 4 5). Elementele din fiecare dintre ele se oglindesc și se obține secvențele (6 7 4 6 3), (7 6 4 6 6) și (5 4 4 6 6).
Exemplul 2
Input:
15 76
3 6 4 7 6 6 6 4 6 7 6 6 4 4 5
Output:
Restricții neîndeplinite.
Rezolvare
<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: "))
# Read the entire line, split it into a list of strings, and convert each string to an integer
vector = list(map(int, input().split()))
return n, k, vector
def afisare(vector):
print(" ".join(map(str, vector)))
def oglindire(st, dr, vector):
while st < dr:
vector[st], vector[dr] = vector[dr], vector[st]
st += 1
dr -= 1
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)
# Oglindire si afisare vector modificat
for i in range(0, n, k):
st = i
dr = min(i + k - 1, n - 1)
oglindire(st, dr, vector)
print("Vectorul dupa oglindire:")
afisare(vector)
if __name__ == "__main__":
main()
</syntaxhighlight>