3327 - La Scoala: Difference between revisions
(One intermediate revision by the same user not shown) | |||
Line 14: | Line 14: | ||
== Restricții și precizări == | == Restricții și precizări == | ||
* 1 | * '''1 ≤ n ≤ 700 | ||
== Exemplul 1 == | == Exemplul 1 == | ||
; Intrare | ; Intrare |
Latest revision as of 21:54, 14 November 2023
Cerinţa[edit | edit source]
Directorul unei şcoli doreşte să premieze la sfârşitul anului şcolar pe cei mai buni elevi la învăţătură. Pentru acest lucru el are de rezolvat două probleme:
1. Să determine câţi elevi vor fi premiaţi dintre cei n ( 2≤n≤700 ) elevi ai şcolii. După discuţii aprinse cu ceilalţi profesori se hotărăşte în Consiliul Profesoral ca numărul premianţilor să fie n-k , unde k este cel mai mare număr pătrat perfect mai mic strict decât n . De exemplu, pentru n=150 , k este 144 (pentru că 144=12*12 ), deci vor fi premiaţi 150- 144 = 6 elevi. 2. Pentru a fi cât mai multă linişte la premiere, în Consiliul Profesoral se ia decizia ca elevii care nu vor fi premiaţi să fie aşezaţi pe terenul de sport pe rânduri de câte p elevi (unde p*p=k ). În acest scop, directorul a numerotat elevii nepremiaţi de la 1 la k şi a hotărât ca elevii să fie aşezaţi în ordinea descrescătoare a numerelor asociate.
Scrieți un program care citește numărul de elevi din școală și afișează numărul de elevi premiați și apoi aranjarea elevilor nepremiați.
Date de intrare[edit | edit source]
Programul citește de la tastatură numărul n reprezentând numărul de elevi din școală.
Date de ieşire[edit | edit source]
Programul va afișa pe ecran numărul de elevi premiaţi și pe urmatoarele k linii o matrice kxk reprezentând modul în care vor fi așezaţi elevii nepremiaţi.
Restricții și precizări[edit | edit source]
- 1 ≤ n ≤ 700
Exemplul 1[edit | edit source]
- Intrare
- 35
- Iesire
- Datele introduse corespund restricțiilor impuse.
- 10
- 25 24 23 22 21
- 20 19 18 17 16
- 15 14 13 12 11
- 10 9 8 7 6
- 5 4 3 2 1
Exemplul 2[edit | edit source]
- Intrare
- n
- Iesire
- Datele introduse nu corespund restricțiilor impuse.
<syntaxhighlight lang="python" line>
- 3327 - La Scoala
import math
- Functia de verificare a datelor de intrare
def verificare_restrictii(n1):
if 1 <= n1 <= 1000: return True else: return False
- Functia premiati calculeaza numarul de elevi premiati si k
def premiati(n1):
k1 = int(math.sqrt(n1)) ** 2 premiantii = n1 - k1 return premiantii, k1
- Functia aranjare creeaza o matrice k x k cu elevii nepremiati
def aranjare(k1):
p = int(math.sqrt(k1)) elevii = [[0] * p for _ in range(p)] numar = k1 for i in range(p): for j in range(p): elevii[i][j] = numar numar -= 1 return elevii
- Functia afisare printeaza matricea pe ecran
def afisare(elevii):
for rand in elevii: print(' '.join(map(str, rand)))
- In main citim numarul de elevi, calculam numarul de premianti si aranjam elevii nepremiati
if __name__ == "__main__":
try: n = int(input()) if verificare_restrictii(n): print("Datele introduse corespund restricțiilor impuse.") premianti, k = premiati(n) print(premianti) elevi = aranjare(k) afisare(elevi) else: print("Datele de intrare nu corespund restrictiilor impuse.") except ValueError: print("Datele de intrare nu corespund restrictiilor impuse.")
</syntaxhighlight>