Cerința
Se dă o matrice cu n
linii și m
coloane și elemente numere naturale. Determinați pentru câte dintre elementele matricei toți vecinii au valori diferite între ele.
Date de intrare
Fișierul de intrare vecini1.in
conține pe prima linie numerele n m
; urmează n
linii cu câte m
numere naturale separate prin spații – elementele matricei.
Date de ieșire
Fișierul de ieșire vecini1.out
va conține pe prima linie numărul C
, reprezentând valoarea cerută.
Restricții și precizări
1 ≤ n,m ≤ 100
- elementele matricei vor fi mai mici decât
1 000 000
- considerăm că un element al matricei poate avea patru vecini: elementele situate pe aceeași linie și pe coloanele adiacente și elementele aflate pe aceeași coloană și liniile adiacente
Exemplu
vecini1.in
4 5 6 6 4 6 6 2 2 6 4 6 1 1 7 3 6 6 3 6 5 6
vecini1.out
9
Explicație
Cele 9
elemente sunt marcate mai jos:
6 | 6 | 4 | 6 | 6 |
2 | 2 | 6 | 4 | 6 |
1 | 1 | 7 | 3 | 6 |
6 | 3 | 6 | 5 | 6 |
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema Vecini1:
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("vecini1.in");
ofstream fout("vecini1.out");
const int di[] = {0 , 0, 1 , -1} , dj[] = {1 , -1 , 0 , 0};
int n,m,A[105][105];
int main()
{
fin >> n >> m;
for(int i =1 ; i <= n ; ++i)
for(int j = 1 ; j <= m ; ++j)
fin >> A[i][j];
//pentru a ignora cazurile speciale (prima linie, prima coloana, etc),
//bordam matricea cu valori diferite, incepand de la valoare maxim + 1
int p = A[1][1] ;
for(int i =1 ; i <= n ; ++i)
for(int j = 1 ; j <+ m ; ++j)
if(A[i][j] > p)
p = A[i][j];
p ++;
for(int i = 0 ; i <= n + 1 ; i ++)
A[i][0] = p ++, A[i][m + 1] = p ++;
for(int j = 1 ; j <= m ; ++j)
A[0][j] = p ++, A[n + 1][j] = p ++;
int cnt = 0;
// parcurgem matricea si verificam pentru fiecare element daca are toti vecinii diferiti
for(int i = 1 ; i <= n ; ++i)
for(int j = 1 ; j <= m ; ++j)
{
bool OK = true;
for(int s = 0 ; s < 3 ; s ++)
for(int t = s + 1 ; t < 4 ; t ++)
if(A[i + di[s]][j + dj[s]] == A[i + di[t]][j + dj[t]])
OK = false;
if(OK)
cnt ++;
}
fout << cnt << endl;
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #635 Vecini1
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #635 Vecini1 de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!