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
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()