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 celen
elemente 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
,k
este divizor al luin
- cele
n
numere 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>