2448 - Pătrate3: Difference between revisions

From Bitnami MediaWiki
Dragos1234 (talk | contribs)
Dragos1234 (talk | contribs)
Line 29: Line 29:
== Exemplul 2 ==
== Exemplul 2 ==
; Intrare
; Intrare
: ''grupapregatitoare.in''
: 21367283
: 100000000 1000000
: 287357253812
: 1 2
: 216932863921
: 21 4
: 89730960
: 5 6
; Ieșire
; Ieșire
: ''grupapregatitoare.out''
: Datele introduse nu corespund cerintelor.
: Datele introduse nu corespund cerintelor.
<br>
<br>

Revision as of 12:27, 9 April 2023

Sursa: [1]

Cerinţa

Pentru valorile n, x, y, val date, trebuie să determinați:

  • ce valoare V se află în pătratul n x n la poziția (x, y).
  • la ce poziție (i, j) se află valoarea val în pătratul n x n.

Date de intrare

Programul citește de la tastatură numerele n, x, y, val, separate prin spații.

Date de ieșire

Programul va afișa pe ecran, mesajul "Datele introduse corespund cerințelor" și pe ecran numerele V, i, j, separate prin câte un spațiu, unde V reprezintă valoarea de la poziția (x, y), iar (i, j) reprezintă poziția unde se află valoarea val. În caz contrar programul va afișa pe o linie noua mesajul "Datele introduse nu corespund cerintelor.".

Restricţii şi precizări

  • 1 ⩽ n ⩽ 20000
  • 1 ⩽ x, yn
  • 1 ⩽ val ⩽ n^2

Exemplul 1

Intrare
4
2
3
12
Ieșire
7 3 4


Exemplul 2

Intrare
21367283
287357253812
216932863921
89730960
Ieșire
Datele introduse nu corespund cerintelor.


Rezolvare

<syntaxhighlight lang="python" line>

  1. 2248

def is_valid_input(n, x, y, v):

   if not (1 <= n <= 20000):
       print("Datele introduse nu corespund cerintelor.")
       exit()
   if not (1 <= x <= n) or not (1 <= y <= n):
       print("Datele introduse nu corespund cerintelor.")
       exit()
   if not (1 <= v <= n ** 2):
       print("Datele introduse nu corespund cerintelor.")
       exit()
   return True


def calculate_coordinates(n, x, y, v):

   # Verifică dacă intrările sunt valide
   if not is_valid_input(n, x, y, v):
       return None
   # Calculează coordonatele folosind formulele din program
   coord_x = (x - 1) * n + y
   coord_y = v // n if v % n == 0 else v // n + 1
   coord_z = n if v % n == 0 else v % n
   return (coord_x, coord_y, coord_z)


def main():

   n = int(input())
   x = int(input())
   y = int(input())
   v = int(input())
   # Calculează coordonatele folosind funcția definită anterior
   coords = calculate_coordinates(n, x, y, v)
   if coords is None:
       print("Input invalid")
   else:
       # Afișează coordonatele separate printr-un spațiu
       print("Datele introduse corespund cerintelor.")
       print(coords[0], coords[1], coords[2])


main() </syntaxhighlight>

Explicatie rezolvare