3327 - La Scoala: Difference between revisions

From Bitnami MediaWiki
 
Line 14: Line 14:


== Restricții și precizări ==
== Restricții și precizări ==
* '''1 n &les 700
* '''1 n 700


== Exemplul 1 ==
== Exemplul 1 ==

Latest revision as of 21:54, 14 November 2023

Cerinţa[edit]

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]

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

Date de ieşire[edit]

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]

  • 1 ≤ n ≤ 700

Exemplul 1[edit]

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]

Intrare
n
Iesire
Datele introduse nu corespund restricțiilor impuse.

<syntaxhighlight lang="python" line>

  1. 3327 - La Scoala

import math


  1. Functia de verificare a datelor de intrare

def verificare_restrictii(n1):

   if 1 <= n1 <= 1000:
       return True
   else:
       return False


  1. Functia premiati calculeaza numarul de elevi premiati si k

def premiati(n1):

   k1 = int(math.sqrt(n1)) ** 2
   premiantii = n1 - k1
   return premiantii, k1


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


  1. Functia afisare printeaza matricea pe ecran

def afisare(elevii):

   for rand in elevii:
       print(' '.join(map(str, rand)))


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