Orar semigroup #2

Orar semigroup #2

11/21

Se da un punct din interiorul unui obiect (intr-o matrice 0-1). Sa se determine numarul de valori 0 situate in imediata vecinatate a frontierei obiectului.

#include<iostream>
#include<fstream>
using namespace std;
int a[100][100],viz[100][100],n,xx,yy,nr;

void citire()
{int i,j;
ifstream f("date");
f>>n;
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            f>>a[i][j];
    f>>xx>>yy;
}

void fill(int x, int y)
{
    if(x>=1 && x<=n && y>=1 && y<=n)
    if(a[x][y]==1 && viz[x][y]==0)
        {viz[x][y]=1;
        fill(x,y+1);
        fill(x,y-1);
        fill(x-1,y);
        fill(x+1,y);}
    else if(x>=1 && x<=n && y>=1 && y<=n && a[x][y]==0)
    {    if(viz[x][y]==0)
        nr++;
    viz[x][y]=2;}
}

int main()
{citire();
fill(xx,yy);
cout<<nr;
}
Fisier
5
0 1 1 0 0
0 0 0 0 1
1 1 0 0 0
0 0 0 0 1
1 1 1 0 0
3 1
Se da o fotografie color (reprezentata printr-o matrice nxm). Culorile sunt numere intregi intre 0 si 9. Sa se verifice daca exista o culoare majoritara. (care sa acopere mai mult de jumatate din suprafata matricii.)
#include<iostream>
#include<fstream>
using namespace std;
int a[100][100],n,m;

void citire()
{int i,j;
ifstream f("date");
f>>n>>m;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            f>>a[i][j];
}

int main()
{
int v[100]={0},i,j,p,k;
citire();
for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
        {p=a[i][j];
        v[p]++;}
for(k=0;k<=9;k++)
    if(v[k]>=n*m/2)
        {cout<<k<<" "<<v[k]<<endl;break;}
cout<<"Culoarea majoritara "<<k<<" apare de "<<v[k]<<" ori";
}
Fisier
5 5
1 1 1 2 1
2 2 1 1 1
4 5 5 5 1
4 2 5 6 7
1 1 1 1 1
In conditiile problemei 6, sa se verifice daca exista un obiect care sa acopere mai mult de jumatate din matrice.
#include<iostream>
#include<fstream>
using namespace std;
int a[100][100],n,m,nr;

void citire()
{int i,j;
ifstream f("date");
f>>n>>m;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            f>>a[i][j];
}

void fill(int x,int y,int k)
{
    if(x>=1 && x<=n && y>=1 && y<=m)
    if(a[x][y]==k)
        {a[x][y]=(-1)*k;
        nr++;
        fill(x,y+1,k);
        fill(x,y-1,k);
        fill(x-1,y,k);
        fill(x+1,y,k);}
}

int main()
{int i,j,k;
citire();
for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
    {k=a[i][j];
    nr=0;
    fill(i,j,k);
    if(nr>=n*m/2)
        {cout<<k<<" "<<nr;return 0;}
    }
}
Fisier
5 5
1 1 1 1 1
2 2 2 2 2
4 2 2 2 2
4 2 2 2 2
1 1 1 1 1

duminică, 20 noiembrie 2011 by DlMuresan
Categories: | Leave a comment

Leave a Reply