2248 - Coordonate
Cerință[edit | edit source]
Se consideră un pătrat mare împărțită în n x n pătrățele identice. Pătratul are deci n linii și n coloane (numerotate de la 1 la n), iar în fiecare pătrățel este trecut câte un număr natural cuprins între 1 și , ca în exemplul de mai jos în care n = 4:
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[edit | edit source]
Programul citește de la tastatură numerele n, x, y, val pe linii separate.
Date de ieșire[edit | edit source]
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele de intrare corespund restricțiilor impuse." și programul va afișa 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, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse."
Restricții și precizări[edit | edit source]
- 1 ≤ n ≤ 20000
- 1 ≤ x, y ≤ n
- 1 ≤ val ≤ Failed to parse (SVG (MathML can be enabled via browser plugin): Invalid response ("Math extension cannot connect to Restbase.") from server "https://wikimedia.org/api/rest_v1/":): {\displaystyle n^2}
Exemplul 1[edit | edit source]
- Intrare
- 4
- 2
- 3
- 12
- Ieșire
- Datele de intrare corespund restricțiilor impuse.
- 7 3 4
Rezolvare[edit | edit source]
Rezolvare ver. 1[edit | edit source]
<syntaxhighlight lang="python" line="1" start="1"> def validare(n, x, y, val):
# Verifică dacă datele de intrare îndeplinesc condițiile impuse de enunț if not (1 <= n <= 20000): return False if not (1 <= x <= n): return False if not (1 <= y <= n): return False if not (1 <= val <= n ** 2): return False return True
def calculeaza_val(n, x, y, val):
# Calculează valoarea Val care se află în pătratul n x n la poziția (x, y) result_str = str((x - 1) * n + y) + ' '
# Calculează poziția (i, j) a valorii val în pătratul n x n if val % n == 0: result_str += str(val // n) + ' ' + str(n) else: result_str += str(val // n + 1) + ' ' + str(val % n) return result_str
if __name__ == "__main__":
# Citirea datelor de intrare n = int(input("n= ")) x = int(input("x= ")) y = int(input("y= ")) val = int(input("val= "))
# Verificarea datelor de intrare și calculul valorilor cerute if validare(n, x, y, val): print("Datele de intrare corespund restricțiilor impuse.") print(calculeaza_val(n, x, y, val)) else: print("Datele de intrare nu corespund restricțiilor impuse.")
</syntaxhighlight>
Explicatie[edit | edit source]
Programul de mai jos determină valoarea V care se află în pătratul n x n la poziția (x, y) și poziția (i, j) a valorii val în pătratul n x n. Funcția validare verifică dacă datele de intrare îndeplinesc condițiile impuse de enunț, iar funcția calculeaza_val calculează valorile cerute în enunț. Programul citește datele de intrare de la tastatură și le trimite apoi la funcția validare pentru a verifica dacă valorile îndeplinesc restricțiile impuse de enunț. Dacă valorile sunt valide, programul calculează valorile cerute prin apelarea funcției calculeaza_val și le afișează pe ecran. Dacă valorile nu sunt valide, programul afișează un mesaj corespunzător pe ecran.