4256 - Oglindire Secvente: Difference between revisions
Miawinator (talk | contribs) Pagină nouă: = Cerința = Se dă un vector cu <code>n</code> elemente, numere naturale, și un număr <code>k</code>, divizor al lui <code>n</code>. Se împarte vectorul in secvențe disjuncte de lungime <code>k</code>. Să se oglindească elementele (primul element din secvență se interschimbă cu ultimul, al doilea cu penultimul, etc.) din fiecare dintre cele <code>n/k</code> secvențe și să se afișeze pe ecran vectorul rezultat în urma acestor modificări. Se vor defini și apel... |
Miawinator (talk | contribs) mNo edit summary |
||
Line 31: | Line 31: | ||
6 7 4 6 3 7 6 4 6 6 5 4 4 6 6 | 6 7 4 6 3 7 6 4 6 6 5 4 4 6 6 | ||
Explicație: | |||
Vectorul se împarte în <code>3</code> secvențe de lungime <code>5</code>: <code>(3 6 4 7 6)</code>, <code>(6 6 4 6 7)</code>și <code>(6 6 4 4 5)</code>. Elementele din fiecare dintre ele se oglindesc și se obține secvențele <code>(6 7 4 6 3)</code>, <code>(7 6 4 6 6)</code> și <code>(5 4 4 6 6)</code>. | |||
== Exemplul 2 == | == Exemplul 2 == |
Latest revision as of 06:19, 11 December 2023
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 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[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 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[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: ")) # 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>