2448 - Pătrate3: Difference between revisions
Dragos1234 (talk | contribs) Ștergerea conținutului paginii Tag: Blanking |
Dragos1234 (talk | contribs) No edit summary Tag: Manual revert |
||
Line 1: | Line 1: | ||
Sursa: [https://www.pbinfo.ro/probleme/2248/coordonate] | |||
== 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, y''' ⩽ '''n''' | |||
* 1 ⩽ '''val''' ⩽ n^2 | |||
== Exemplul 1 == | |||
; Intrare | |||
: 4 | |||
: 2 | |||
: 3 | |||
: 12 | |||
; Ieșire | |||
: 7 3 4 | |||
<br> | |||
== Exemplul 2 == | |||
; Intrare | |||
: 21367283 | |||
: 287357253812 | |||
: 216932863921 | |||
: 89730960 | |||
; Ieșire | |||
: Datele introduse nu corespund cerintelor. | |||
<br> | |||
== Rezolvare == | |||
<syntaxhighlight lang="python" line> | |||
#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 == | |||
Acest program verifică dacă intrările sunt valide și calculează coordonatele unui punct într-un grid dreptunghiular. Funcția is_valid_input verifică dacă valorile introduse sunt valide, conform cerințelor problemei. Dacă acestea nu corespund, se afișează un mesaj de eroare și programul se încheie. Funcția calculate_coordinates primește intrările valide și calculează coordonatele punctului folosind formulele date în problemă. În funcția main, se citesc intrările și se apelează funcția calculate_coordinates pentru a calcula coordonatele. Dacă intrările nu sunt valide, se afișează un mesaj de eroare. În caz contrar, se afișează coordonatele punctului. |
Revision as of 12:30, 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, y ⩽ n
- 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>
- 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
Acest program verifică dacă intrările sunt valide și calculează coordonatele unui punct într-un grid dreptunghiular. Funcția is_valid_input verifică dacă valorile introduse sunt valide, conform cerințelor problemei. Dacă acestea nu corespund, se afișează un mesaj de eroare și programul se încheie. Funcția calculate_coordinates primește intrările valide și calculează coordonatele punctului folosind formulele date în problemă. În funcția main, se citesc intrările și se apelează funcția calculate_coordinates pentru a calcula coordonatele. Dacă intrările nu sunt valide, se afișează un mesaj de eroare. În caz contrar, se afișează coordonatele punctului.