3174 - R10: Difference between revisions
Pagină nouă: ==Cerința== Se dă un şir v cu n elemente numere reale. Acesta se împarte în n/k secvenţe de k elemente. Să se sorteze fiecare secvenţă şi să se afişeze şirul format de acestea, în ordinea în care au fost date. ==Date de intrare== Datele de intrare conțin pe prima linie numărul n, şi numărul k, iar pe a doua linie n numere reale separate prin spații. ==Date de ieșire== Datele de ieșire vor conține pe prima linie şirul cerut. ==Restricții și preciz... |
No edit summary |
||
(One intermediate revision by the same user not shown) | |||
Line 6: | Line 6: | ||
==Date de ieșire== | ==Date de ieșire== | ||
Datele de ieșire vor conține pe | Datele de ieșire vor conține un mesaj de validitate (sau nu) a datelor introduse, iar pe următoarea linie şirul cerut. | ||
==Restricții și precizări== | ==Restricții și precizări== | ||
* 1 | * 1 ⩽ n ⩽ 100.000 | ||
* 1 | * 1 ⩽ k ⩽ 25.000 | ||
* k îl divide pe n | * k îl divide pe n | ||
* numerele de pe a doua linie a fișierului de intrare, în modul, vor fi mai mici decât 1.000.000.000 | * numerele de pe a doua linie a fișierului de intrare, în modul, vor fi mai mici decât 1.000.000.000 | ||
==Exemplu 1== | ==Exemplu 1== | ||
intrare | ; intrare | ||
: 10 2 | |||
: 10 9 8 7 6 5 4 3 2 1 | |||
; ieșire | |||
ieșire | : Date de intrare valide | ||
: 9 10 7 8 5 6 3 4 1 2 | |||
===Explicație=== | ===Explicație=== | ||
Şirul a fost împărţit în grupări de câte două, ele fiind sortate şi afişate în ordinea primită. | Şirul a fost împărţit în grupări de câte două, ele fiind sortate şi afişate în ordinea primită. | ||
==Exemplu 2== | ==Exemplu 2== | ||
intrare | ; intrare | ||
: 10 10 | |||
: 9.1 6 2 -1.5 6.9 10 11 1000 -101.5123 880.45 | |||
; ieșire | |||
ieșire | : Date de intrare valide | ||
: -101.512 -1.5 2 6 6.9 9.1 10 11 880.45 1000 | |||
===Explicație=== | ===Explicație=== | ||
Acest exemplu conţine numere reale, nu neapărat întregi. | Acest exemplu conţine numere reale, nu neapărat întregi. | ||
==Exemplu 3== | ==Exemplu 3== | ||
intrare | ; intrare | ||
: 10 1 | |||
: 10 9 8 7 6 5 4 3 2 1 | |||
; ieșire | |||
ieșire | : Date de intrare valide | ||
: 10 9 8 7 6 5 4 3 2 1 | |||
===Explicație=== | ===Explicație=== | ||
Pentru k = 1, şirul rămâne la fel. | Pentru k = 1, şirul rămâne la fel. | ||
==Exemplu 4== | ==Exemplu 4== | ||
intrare | ; intrare | ||
: 9 3 | |||
: 82 85 78 69 84 69 101 82 97 | |||
; ieșire | |||
ieșire | : Date de intrare valide | ||
: 78 82 85 69 69 84 82 97 101 | |||
===Explicație=== | ===Explicație=== | ||
Un ultim exemplu bonus. | Un ultim exemplu bonus. | ||
Line 62: | Line 58: | ||
if n % k != 0: | if n % k != 0: | ||
print("Numarul de elemente nu este multiplu de k.") | print("Numarul de elemente nu este multiplu de k.") | ||
return 0 | |||
for num in lst: | for num in lst: | ||
try: | try: | ||
Line 68: | Line 64: | ||
except ValueError: | except ValueError: | ||
print("Date invalide. Elementele trebuie sa fie numere reale.") | print("Date invalide. Elementele trebuie sa fie numere reale.") | ||
return 0 | |||
return 1 | |||
def solve(n, k, lst): | def solve(n, k, lst): | ||
Line 76: | Line 74: | ||
return result | return result | ||
if __name__ == "__main__": | |||
n, k = map(int, input().split()) | n, k = map(int, input().split()) | ||
lst = input().split() | lst = input().split() | ||
validate_input(n, k, lst) | if validate_input(n, k, lst): | ||
print("Date de intrare valide.") | |||
result = solve(n, k, lst) | |||
print(" ".join(map(str, result))) | |||
</syntaxhighlight> | |||
==Explicație cod== | |||
Funcția `validate_input` primește trei argumente: `n` - numărul total de elemente, `k` - numărul de elemente din fiecare secvență și `lst` - lista cu toate elementele. Funcția verifică dacă numărul total de elemente este multiplu de `k` și dacă toate elementele sunt numere reale, returnând `1` dacă datele de intrare sunt valide și `0` altfel. | |||
Funcția `solve` primește același set de date ca `validate_input`. Funcția împarte lista `lst` în secvențe de lungime `k`, sortează fiecare secvență în parte și apoi concatenază secvențele sortate. Rezultatul este o listă de elemente sortate. | |||
În funcția principală `__main__`, se citesc datele de intrare și se verifică dacă acestea sunt valide cu ajutorul funcției `validate_input`. Dacă datele sunt valide, se afișează un mesaj corespunzător și se calculează rezultatul cu ajutorul funcției `solve`, urmat de afișarea rezultatului într-o singură linie cu ajutorul metodei `join`. |
Latest revision as of 06:34, 28 April 2023
Cerința[edit | edit source]
Se dă un şir v cu n elemente numere reale. Acesta se împarte în n/k secvenţe de k elemente. Să se sorteze fiecare secvenţă şi să se afişeze şirul format de acestea, în ordinea în care au fost date.
Date de intrare[edit | edit source]
Datele de intrare conțin pe prima linie numărul n, şi numărul k, iar pe a doua linie n numere reale separate prin spații.
Date de ieșire[edit | edit source]
Datele de ieșire vor conține un mesaj de validitate (sau nu) a datelor introduse, iar pe următoarea linie şirul cerut.
Restricții și precizări[edit | edit source]
- 1 ⩽ n ⩽ 100.000
- 1 ⩽ k ⩽ 25.000
- k îl divide pe n
- numerele de pe a doua linie a fișierului de intrare, în modul, vor fi mai mici decât 1.000.000.000
Exemplu 1[edit | edit source]
- intrare
- 10 2
- 10 9 8 7 6 5 4 3 2 1
- ieșire
- Date de intrare valide
- 9 10 7 8 5 6 3 4 1 2
Explicație[edit | edit source]
Şirul a fost împărţit în grupări de câte două, ele fiind sortate şi afişate în ordinea primită.
Exemplu 2[edit | edit source]
- intrare
- 10 10
- 9.1 6 2 -1.5 6.9 10 11 1000 -101.5123 880.45
- ieșire
- Date de intrare valide
- -101.512 -1.5 2 6 6.9 9.1 10 11 880.45 1000
Explicație[edit | edit source]
Acest exemplu conţine numere reale, nu neapărat întregi.
Exemplu 3[edit | edit source]
- intrare
- 10 1
- 10 9 8 7 6 5 4 3 2 1
- ieșire
- Date de intrare valide
- 10 9 8 7 6 5 4 3 2 1
Explicație[edit | edit source]
Pentru k = 1, şirul rămâne la fel.
Exemplu 4[edit | edit source]
- intrare
- 9 3
- 82 85 78 69 84 69 101 82 97
- ieșire
- Date de intrare valide
- 78 82 85 69 69 84 82 97 101
Explicație[edit | edit source]
Un ultim exemplu bonus.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python"> def validate_input(n, k, lst):
if n % k != 0: print("Numarul de elemente nu este multiplu de k.") return 0 for num in lst: try: float(num) except ValueError: print("Date invalide. Elementele trebuie sa fie numere reale.") return 0 return 1
def solve(n, k, lst):
sequences = [lst[i:i+k] for i in range(0, n, k)] sorted_sequences = [sorted(seq) for seq in sequences] result = [num for seq in sorted_sequences for num in seq] return result
if __name__ == "__main__":
n, k = map(int, input().split()) lst = input().split() if validate_input(n, k, lst): print("Date de intrare valide.") result = solve(n, k, lst) print(" ".join(map(str, result)))
</syntaxhighlight>
Explicație cod[edit | edit source]
Funcția `validate_input` primește trei argumente: `n` - numărul total de elemente, `k` - numărul de elemente din fiecare secvență și `lst` - lista cu toate elementele. Funcția verifică dacă numărul total de elemente este multiplu de `k` și dacă toate elementele sunt numere reale, returnând `1` dacă datele de intrare sunt valide și `0` altfel.
Funcția `solve` primește același set de date ca `validate_input`. Funcția împarte lista `lst` în secvențe de lungime `k`, sortează fiecare secvență în parte și apoi concatenază secvențele sortate. Rezultatul este o listă de elemente sortate.
În funcția principală `__main__`, se citesc datele de intrare și se verifică dacă acestea sunt valide cu ajutorul funcției `validate_input`. Dacă datele sunt valide, se afișează un mesaj corespunzător și se calculează rezultatul cu ajutorul funcției `solve`, urmat de afișarea rezultatului într-o singură linie cu ajutorul metodei `join`.