3327 - La Scoala: Difference between revisions
Pagină nouă: == Cerinţa == 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... |
|||
(5 intermediate revisions by 2 users not shown) | |||
Line 3: | Line 3: | ||
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. | 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. | 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. | 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 == | == Date de intrare == | ||
Programul citește de la tastatură numărul n reprezentând numărul de elevi din școală. | Programul citește de la tastatură numărul '''n''' reprezentând numărul de elevi din școală. | ||
== Date de ieşire == | == Date de ieşire == | ||
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. | 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 == | == Restricții și precizări == | ||
* 1 | * '''1 ≤ n ≤ 700 | ||
== | |||
== Exemplul 1 == | |||
; Intrare | ; Intrare | ||
: 35 | : 35 | ||
; Iesire | ; Iesire | ||
: Datele introduse corespund restricțiilor impuse. | |||
: 10 | : 10 | ||
: 25 24 23 22 21 | : 25 24 23 22 21 | ||
Line 22: | Line 27: | ||
: 10 9 8 7 6 | : 10 9 8 7 6 | ||
: 5 4 3 2 1 | : 5 4 3 2 1 | ||
== Exemplul 2 == | |||
; Intrare | |||
: n | |||
; Iesire | |||
: Datele introduse nu corespund restricțiilor impuse. | |||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
# 3327 - La Scoala | |||
import math | 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 | # Functia premiati calculeaza numarul de elevi premiati si k | ||
def premiati( | def premiati(n1): | ||
k1 = int(math.sqrt(n1)) ** 2 | |||
premiantii = n1 - k1 | |||
return premiantii, k1 | |||
return | |||
# Functia aranjare creeaza o matrice k x k cu elevii nepremiati | # Functia aranjare creeaza o matrice k x k cu elevii nepremiati | ||
def aranjare( | def aranjare(k1): | ||
p = int(math.sqrt(k1)) | |||
p = int(math.sqrt( | elevii = [[0] * p for _ in range(p)] | ||
numar = k1 | |||
numar = | |||
for i in range(p): | for i in range(p): | ||
for j in range(p): | for j in range(p): | ||
elevii[i][j] = numar | |||
numar -= 1 | numar -= 1 | ||
return | return elevii | ||
# Functia afisare printeaza matricea pe ecran | # Functia afisare printeaza matricea pe ecran | ||
def afisare( | def afisare(elevii): | ||
for rand in | for rand in elevii: | ||
print(' '.join(map(str, rand))) | print(' '.join(map(str, rand))) | ||
# In main citim numarul de elevi, calculam numarul de premianti si aranjam elevii nepremiati | # In main citim numarul de elevi, calculam numarul de premianti si aranjam elevii nepremiati | ||
if __name__ == "__main__": | if __name__ == "__main__": | ||
n = int(input()) | 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> | </syntaxhighlight> |
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>