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)
Descriem un iceberg ca o matrice n*m in care valorile egale cu 1 reprezinta pozitii care apartin icebergului (sunt cu gheata), iar cele egale cu 0 pozitiile care apartin apei. Stiind ca icebergul este inconjurat de apa (nu exista nici o valoare de 1 pe marginea matricii) si ca regula de topire este urmatoarea: intr-un interval de timp se topeste o portiune care are cel putin doua laturi vecine cu apa, determinati si afisati cate intervale de timp sunt necesare ca icebergul sa se topeasca. De asemenea, afisati pentru fiecare interval de timp cate pozitii de gheata are icebergul la inceputul intervalului.
Exemplu:
6 7
0 0 0 0 0 0 0
0 1 1 1 1 1 0
0 0 1 1 1 0 0
0 0 1 1 1 0 0
0 1 1 1 1 1 0
0 0 0 0 0 0 0
se vor afisa:
4 (intervalele de timp)
16
12
8
2
Explicatie:
Dupa primul interval de timp ghetarul arata astfel:
0 0 0 0 0 0 0
0 0 1 1 1 0 0
0 0 1 1 1 0 0
0 0 1 1 1 0 0
0 0 1 1 1 0 0
0 0 0 0 0 0 0
Dupa cel de-al doilea interval de timp ghetarul arata astfel:
0 0 0 0 0 0 0
0 0 0 1 0 0 0
0 0 1 1 1 0 0
0 0 1 1 1 0 0
0 0 0 1 0 0 0
0 0 0 0 0 0 0
Dupa cel de-al treilea interval de timp ghetarul arata astfel:
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 1 0 0 0
0 0 0 1 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
iar la pasul urmator se topeste de tot.

#include <fstream>
using namespace std;
ifstream is("date.in");
ofstream os("date.out");
int a[100][100],p[100],n,m,t=0;

void citire()
{
    int i,j;
    is>>n>>m;
    for(i=0;i<n;i++)
        for(j=0;j<m;j++)
             is>>a[i][j];
}

int main()
{
    int i,k,j,s=0;
    citire();
    for(i=0;i<n;i++)
        for(j=0;j<m;j++)
            {
              s=s+a[i][j];
              p[t]=s;
            }
    while(s>0)
    {
        s=p[t];
        for(i=1;i<n-1;i++)
            for(j=1;j<m-1;j++)
            if(a[i][j]==1)
            {
                k=0;
                if(a[i-1][j]==0) k++;
                if(a[i+1][j]==0) k++;
                if(a[i][j-1]==0) k++;
                if(a[i][j+1]==0) k++;
                if(k>=2)
                {
                    s--;
                    a[i][j]=2;
                }
            }
        t++;
        p[t]=s;
        for(i=1;i<n-1;i++)
            for(j=1;j<m-1;j++)
               if(a[i][j]==2) a[i][j]=0;
    }
    os<<t<<endl;
    for(i=0;i<t;i++) os<<p[i]<<endl;
    is.close();
    os.close();
    return 0;
}

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