Probleme de informatica - enunturi si rezolvari

Probleme de informatică
Clasa a IX-a
Elementele de bază C++ (46)
Subprograme predefinite (1)
Fişiere text (2)
Algoritmi elementari (109)
Tablouri unidimensionale (83)
Tablouri bidimensionale (64)
Probleme diverse (13)
Clasa a X-a
Subprograme (funcții) (87)
Şiruri de caractere (49)
Tipul înregistrare (26)
Recursivitate (57)
Alocarea dinamică a memoriei (2)
Liste înlănţuite (25)
Algoritmul lui Lee (1)
Clasa a XI-a
Metoda "Divide et impera" (12)
Metoda Backtracking (85)
Metoda Greedy (6)
Programare dinamică (18)
Grafuri neorientate (37)
Grafuri orientate (38)
Arbori (33)
Clasa a XII-a
Elemente de bază C# (32)
POO în C# (13)
Programare vizuală în C# (10)
Examen de bacalaureat
Competențe digitale
Examen de atestat
Admitere UBB (18)
Din fisierul colmaxvecini.in se citesc doua numere naturale n si m (n<=100) si apoi se citeste o matrice cu n linii si m coloane avand elemente numere naturale cu cel mult 6 cifre fiecare. Afisati in fisierul colmaxvecini.out numarul de coloane pe care se afla un numar maxim de elemente cu proprietatea ca sunt mai mari decat toti vecinii lor. Se considera vecini elementele alaturate pe linie sau pe coloana.
Se vor scrie si folosi functii pentru:
- citirea matricii
- verificarea daca un element din matrice e mai mare decat toti vecinii sai
- determinarea numarul de elemente de pe o coloana care sunt mai mari decat toti vecinii lor
- determinarea numarul maxim de elemente de pe o coloana care sunt mai mari decat toti vecinii lor
- determinarea numarului de coloane care respecta cerinta problemei.
Exemplu:
colmaxvecini.in
5 6
11 21 909 343 200 900
500 11 200 33 343 200
909 11 901 33 343 901
109 2 35 47 5 67
909 121 901 323 343 901
colmaxvecini.out
2
Coloanele care respecta cerinta sunt cele cu numerele de ordine 3 si 6 (numerotarea incepe de la 1).


#include <fstream>
using namespace std;
ifstream fin("colmaxvecini.in");
ofstream fout("colmaxvecini.out");

int A[101][101],n,m;

void citire(int A[][101], int &n, int &m)
{
    fin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            fin>>A[i][j];
}

int maimare(int A[][101], int i, int j)
{//verifica daca A[i][j] e mai mare decat toti vecinii sai
    return A[i][j]>A[i-1][j] && A[i][j]>A[i+1][j] && A[i][j]>A[i][j-1] && A[i][j]>A[i][j+1];
}

int maimarecol(int A[][101], int n, int j)
{//numara cate elemente de pe coloana j sunt mai mari decat toti vecinii lor
    int c=0;
    for(int i=1;i<=n;i++)
        if(maimare(A,i,j)) c++;
    return c;
}

int maxcol(int A[][101], int n, int m)
{//nr max de elemente de pe o coloana care sunt mai mari decat toti vecinii lor
    int max=0;
    for(int j=1;j<=m;j++)
        if(maimarecol(A,n,j)>max) max=maimarecol(A,n,j);
    return max;
}

int catemaxcol(int A[][101], int n, int m)
{//numara cate coloane au max de elemente care sunt mai mari decat toti vecinii lor
    int c=0,max=maxcol(A,n,m);
    for(int j=1;j<=m;j++)
        if(maimarecol(A,m,j)==max) c++;
    return c;
}

int main()
{
    citire(A,n,m);
    fout<<catemaxcol(A,n,m);
    return 0;
}

20 aug 2018
Site-ul conține 867 de probleme rezolvate
Copyright © 2009-2018 Muresan Vasile Ciprian