1266 - Cauta Nr In Matrice: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
== Cerinta == | == Cerinta == | ||
Se dă o matrice cu n linii şi m coloane ce conţine numere naturale astfel încât parcurgând matricea pe prima linie de la stânga la dreapta, pe a doua linie de la dreapta la stânga, pe a treia linie de la stânga la drepta, ş.a.m.d., toate elementele matricei vor forma un şir strict crescător. Fiind date p numere naturale ordonate strict crescător, să se afişeze pentru fiecare numărul liniei şi coloanei unde acesta se găseşte în matrice, respectiv 0 dacă acesta nu se găseşte în matrice. | Se dă o matrice cu '''n''' linii şi '''m''' coloane ce conţine numere naturale astfel încât parcurgând matricea pe prima linie de la stânga la dreapta, pe a doua linie de la dreapta la stânga, pe a treia linie de la stânga la drepta, ş.a.m.d., toate elementele matricei vor forma un şir strict crescător. Fiind date '''p''' numere naturale ordonate strict crescător, să se afişeze pentru fiecare numărul liniei şi coloanei unde acesta se găseşte în matrice, respectiv '''0''' dacă acesta nu se găseşte în matrice. | ||
== Date de intrare == | == Date de intrare == | ||
Fișierul de intrare | Fișierul de intrare '''cautanrinmatricein.txt''' conține pe prima linie numerele '''n''' şi '''m''' reprezentând dimensiunile matricei , pe următoarele n linii câte m numere aranjate conform enunţului reprezentând elementele matricei, pe următoarea linie numărul p, iar pe ultima linie cele '''p''' numere în ordine strict crescătoare ce trebuie căutate în matrice. | ||
== Date de iesire == | == Date de iesire == | ||
Fișierul de ieșire | Fișierul de ieșire '''cautanrinmatriceout.txt''' va conține pe primele '''p''' linii numărul liniei şi coloanei pe care se află în matrice fiecare din cele '''p''' numere date, respectiv '''0''' dacă numărul nu se găseşte în matrice. | ||
== Restrictii si precizari == | == Restrictii si precizari == | ||
*1 | *'''1 ⩽ n , m ⩽ 1000''' | ||
*elementele matricei sunt numere naturale mai mici decât 2.000.000.000 | *elementele matricei sunt numere naturale mai mici decât '''2.000.000.000''' | ||
*1 | *'''1 ⩽ p ⩽ 1.000.000''' | ||
*cele p numere vor fi mai mici decât 2.000.000.000 | *cele p numere vor fi mai mici decât '''2.000.000.000''' | ||
== Exemplul 1 == | == Exemplul 1 == | ||
;Intrare | ;Intrare | ||
:3 4 | ;cautanrinmatriecein.txt | ||
:2 5 11 14 | : 3 4 | ||
:29 27 23 19 | : 2 5 11 14 | ||
:32 38 44 59 | : 29 27 23 19 | ||
:3 | : 32 38 44 59 | ||
:11 24 38 | : 3 | ||
: 11 24 38 | |||
;Iesire | ;Iesire | ||
:Datele introduse corespund restrictiilor impuse. | |||
:1 3 | :cautanrinmatriceout.txt | ||
:0 | : 1 3 | ||
:3 2 | : 0 | ||
: 3 2 | |||
== Exemplul 2 == | == Exemplul 2 == | ||
;Intrare | ;Intrare | ||
:3 2 | ;cautanrinmatricein.txt | ||
:5 8 | : 3 2 | ||
:12 19 | : 5 8 | ||
:23 21 | : 12 19 | ||
: 23 21 | |||
;Iesire | ;Iesire | ||
;Datele introduse nu corespund restrictiilor impuse. | ;Datele introduse nu corespund restrictiilor impuse. | ||
;cautanrinmatriceout.txt | |||
Line 54: | Line 58: | ||
def main(): | def main(): | ||
# Citirea datelor de intrare din fișier | # Citirea datelor de intrare din fișier | ||
with open(" | with open("cautanrinmatricein.txt", "r") as f: | ||
n, m = map(int, f.readline().split()) | n, m = map(int, f.readline().split()) | ||
matrice = [list(map(int, f.readline().split())) for _ in range(n)] | matrice = [list(map(int, f.readline().split())) for _ in range(n)] | ||
Line 61: | Line 65: | ||
# Deschiderea fișierului de ieșire pentru scriere | # Deschiderea fișierului de ieșire pentru scriere | ||
with open(" | with open("cautanrinmatriceout.txt", "w") as g: | ||
# Căutarea și scrierea rezultatelor în fișierul de ieșire | # Căutarea și scrierea rezultatelor în fișierul de ieșire | ||
for numar in numere_cautate: | for numar in numere_cautate: |
Revision as of 08:08, 27 December 2023
Cerinta
Se dă o matrice cu n linii şi m coloane ce conţine numere naturale astfel încât parcurgând matricea pe prima linie de la stânga la dreapta, pe a doua linie de la dreapta la stânga, pe a treia linie de la stânga la drepta, ş.a.m.d., toate elementele matricei vor forma un şir strict crescător. Fiind date p numere naturale ordonate strict crescător, să se afişeze pentru fiecare numărul liniei şi coloanei unde acesta se găseşte în matrice, respectiv 0 dacă acesta nu se găseşte în matrice.
Date de intrare
Fișierul de intrare cautanrinmatricein.txt conține pe prima linie numerele n şi m reprezentând dimensiunile matricei , pe următoarele n linii câte m numere aranjate conform enunţului reprezentând elementele matricei, pe următoarea linie numărul p, iar pe ultima linie cele p numere în ordine strict crescătoare ce trebuie căutate în matrice.
Date de iesire
Fișierul de ieșire cautanrinmatriceout.txt va conține pe primele p linii numărul liniei şi coloanei pe care se află în matrice fiecare din cele p numere date, respectiv 0 dacă numărul nu se găseşte în matrice.
Restrictii si precizari
- 1 ⩽ n , m ⩽ 1000
- elementele matricei sunt numere naturale mai mici decât 2.000.000.000
- 1 ⩽ p ⩽ 1.000.000
- cele p numere vor fi mai mici decât 2.000.000.000
Exemplul 1
- Intrare
- cautanrinmatriecein.txt
- 3 4
- 2 5 11 14
- 29 27 23 19
- 32 38 44 59
- 3
- 11 24 38
- Iesire
- Datele introduse corespund restrictiilor impuse.
- cautanrinmatriceout.txt
- 1 3
- 0
- 3 2
Exemplul 2
- Intrare
- cautanrinmatricein.txt
- 3 2
- 5 8
- 12 19
- 23 21
- Iesire
- Datele introduse nu corespund restrictiilor impuse.
- cautanrinmatriceout.txt
Rezolvare
<syntaxhighlight lang="python3" line="1"> def cauta_in_matrice(matrice, numar):
for i in range(len(matrice)): for j in range(len(matrice[i])): if matrice[i][j] == numar: return i + 1, j + 1 # Adăugăm 1 pentru a afișa linia și coloana în formatul din enunț return 0, 0 # Numărul nu a fost găsit în matrice
def main():
# Citirea datelor de intrare din fișier with open("cautanrinmatricein.txt", "r") as f: n, m = map(int, f.readline().split()) matrice = [list(map(int, f.readline().split())) for _ in range(n)] p = int(f.readline()) numere_cautate = list(map(int, f.readline().split()))
# Deschiderea fișierului de ieșire pentru scriere with open("cautanrinmatriceout.txt", "w") as g: # Căutarea și scrierea rezultatelor în fișierul de ieșire for numar in numere_cautate: linie, coloana = cauta_in_matrice(matrice, numar) g.write(f"{linie} {coloana}\n")
if __name__ == "__main__":
main()
</syntaxhighlight>
Explicatie
Numărul 11 se află în matrice pe linia 1 coloana 3, numărul 24 nu se află în matrice, iar numărul 38 se află în matrice pe linia 3, coloana 2.