3327 - La Scoala

From Bitnami MediaWiki
Revision as of 17:20, 24 October 2023 by Zmicala Narcis (talk | contribs) (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...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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

Programul citește de la tastatură numărul n reprezentând numărul de elevi din școală.

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.

Restricții și precizări

  • 1 &les n &les 700

Exemplu

Intrare
35
Iesire
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

<syntaxhighlight lang="python" line> import math

  1. Functia premiati calculeaza numarul de elevi premiati si k

def premiati(n):

   # k este cel mai mare numar patrat perfect mai mic strict decat n
   k = int(math.sqrt(n))**2
   # Numarul de premianti este n - k
   premianti = n - k
   return premianti, k
  1. Functia aranjare creeaza o matrice k x k cu elevii nepremiati

def aranjare(k):

   # Numarul de elevi pe rand este radacina patrata a lui k
   p = int(math.sqrt(k))
   # Initializam matricea cu 0
   elevi = [[0]*p for _ in range(p)]
   # Numarul asociat fiecarui elev incepe de la k si scade cu 1 la fiecare pas
   numar = k
   for i in range(p):
       for j in range(p):
           elevi[i][j] = numar
           numar -= 1
   return elevi
  1. Functia afisare printeaza matricea pe ecran

def afisare(elevi):

   for rand in elevi:
       print(' '.join(map(str, rand)))
  1. In main citim numarul de elevi, calculam numarul de premianti si aranjam elevii nepremiati

if __name__ == "__main__":

   n = int(input())
   premianti, k = premiati(n)
   print(premianti)
   elevi = aranjare(k)
   afisare(elevi)

</syntaxhighlight>