Sunteți pe pagina 1din 5

Prof.

Mihaela Corina ILDEGEZ


Centru pentru pregătire pentru Performanță

Obiective:
Declarare
MATRICE PĂTRATICĂ Parcurgerea matricei în diferite
moduri
Parcurgerea diagonalelor
Zone separate de diagonale

Cuprins
Problema 1129 – Ținta(ONI GIM, 2014, clasa VI) ............................................................................................................... 1
Problema 1584 – Spirala 2 .................................................................................................................................................. 3
Problema 1218 Teren (ONI GIM, 2015 clasa VI) ................................................................................................................. 4
Matrice pătratică .................................................................................................................................................................... 5
TEMA:...................................................................................................................................................................................... 5
Problema #1699 Roboțel (ONI GIM, 2006, clasa VI) tema .................................................. Error! Bookmark not defined.

Problema 1129 – Ținta(ONI GIM, 2014, clasa VI)


 Se construiește ținta în matricea a, începând cu prima diagonală paralelă
cu diagonala secundară, se continuă cu a doua, ş.a.m.d. până la
diagonala secundară. Se procedează la fel pentru diagonalele paralele
cu diagonala secundară, diagonale aflate sub aceasta;

int x=1,l,c;
///deasupra diagonalei principale
for(int i=1; i<=n; i++)
if(i%2==0) ///linie para merg pe diagonala de sus spre dreapa
{
l=1;
c=i;
while(c>=1)
{
a[l][c]=x;
x++; l++; c--;
}
}
else
{
l=i;///merg pe diagonala sec de la linia i in sus, spre dreapta
c=1;
while(l>=1)
{
Prof. Mihaela Corina ILDEGEZ
Centru pentru pregătire pentru Performanță
a[l][c]=x;
l--; c++; x++;
}
}

///sub diagonala principala


for(int i=2; i<=n; i++)
if(i%2==0)///merg pe diagonala paralela cu DS. de a linia i in jos, spre stanga
{ l=i;
c=n;
while(l<=n)
{
a[l][c]=x;
x++; l++;c--;
}
}
else
{ l=n; )///merg pe diagonala paralela cu DS. de a linia n in sus, spre dreapta
c=i;
while(c<=n)
{
a[l][c]=x;
x++; l--; c++;
}
}
 Se calculează într-o matrice b toate valorile care s-ar obține dacă a[i-1][j-1] a[i-1][j] a[i-1][j+1]
Alex țintește elementul aflat pe aceeași poziție în a:
a[i][j-1] a[ i ][ j ] a[i][j+1]
a[i+1][j-1] a[i+1][j] a[i+1][j+1]

for(i=2;i<n; i++)
for(j=2;j<n; j++)
b[i][j]=a[i-1][j-1]+a[i-1][j]+a[i-1][j+1]+
a[i+1][j-1]+a[i+1][j]+a[i+1][j+1]+a[i][j-1]+a[i][j+1];
 Rezultatul la cerinţa b) se calculează însumând numărul de diagonale paralele cu diagonala secundară,
exceptând diagonalele pe care se află doar elemente de pe conturul matricei, adică n-2+n-3;
g<<n-3+n-2<<'\n';
 Pentru cerinţa c) se vor afișa din matricea b elementele de pe linia
2, începând din coloana 2, până în coloana n-2 şi elementele de pe
linia n-1, coloanele 2,3,…,n-1.
for(j=2;j<=n-2;j++)
g<<b[2][j]<<" ";
for(j=2;j<=n-1;j++)
g<<b[n-1][j]<<" ";
Prof. Mihaela Corina ILDEGEZ
Centru pentru pregătire pentru Performanță
Problema 1584 – Spirala 2
Matricea este pătratică, de dimensiune
n, deci se observă că putem calcula numărul de
”pătrate concentrice” astfel: k=n/2; daca n
este par, si un element în mijlocul
matricei(a[n/2+1][n/2+1]) dacă n-impar.
Fie k un astfel de contur ca în figura următoare.
El va fi completat în ordinea de pe desen(1, 2,
3, 4) respectând sensul de parcurgere al
zonelor marcate.
x=1;
for(k=1;k<=n/2;k++)
{
///linia k de la stanga la dreapta
for(i=k; i<=n-k; i++)
a[k][i]=x, x++;

///coloana n-k+1 de sus in jos


for(i=k; i<=n-k; i++)
a[i][n-k+1]=x, x++;

///linia n-k+1 de la dreapta la stanga


for(i=n-k+1;i>k; i--)
a[n-k+1][i]=x, x++;

///coloana k de jos in sus


for(i=n-k+1;i>k; i--)
a[i][k]=x, x++;
}
if(n%2!=0) ///numar impar de linii si coloane=> am un element in centrul matricei
a[n/2+1][n/2+1]=x;

Cerința 1: Cerința 2:
if(p==1) for(i=1;i<=n;i++)
{unsigned long long s=0; {
for(int i=1;i<=n;i++) aux=a[lin][i];
if(i!=lin) a[lin][i]=a[i][lin];
s=s+a[lin][i]%100003; a[i][lin]=aux;
for(int i=1;i<=n;i++) }
if(i!=lin) for(i=1;i<=n;i++)
s=s+a[i][lin]%100003; { for(j=1;j<=n;j++)
g<<s<<endl; g<<a[i][j]<<" ";
} g<<endl;
}
Prof. Mihaela Corina ILDEGEZ
Centru pentru pregătire pentru Performanță
Problema 1218 Teren (ONI GIM, 2015 clasa VI)
Se utilizează o matrice a cu n linii și m coloane, inițial toate elementele ei fiind egale cu zero. Se va utiliza
această matrice, ca o matrice de frecvență(principiu preluat de la vectorii de frecvență) pentru a memora
numărul de fermieri care revendică fiecare parcelă. Fiecare parcelă este un element din matrice.
0, 𝑑𝑎𝑐ă 𝑛𝑖𝑐𝑖 𝑢𝑛 𝑓𝑒𝑟𝑚𝑖𝑒𝑟 𝑛𝑢 𝑟𝑒𝑣𝑒𝑛𝑑𝑖𝑐ă 𝑝𝑎𝑟𝑐𝑒𝑙𝑎 𝑑𝑒 𝑐𝑜𝑜𝑟𝑑𝑜𝑛𝑎𝑡𝑒 𝑖 ș 𝑗
a[i][j]={
𝑛𝑟, 𝑛𝑢𝑚ă𝑟𝑢𝑙 𝑑𝑒 𝑓𝑒𝑟𝑚𝑖𝑒𝑟𝑖 𝑐𝑎𝑟𝑒 𝑟𝑒𝑣𝑒𝑛𝑑𝑖𝑐ă 𝑝𝑎𝑟𝑐𝑒𝑙𝑎 𝑑𝑒 𝑐𝑜𝑜𝑟𝑑𝑜𝑛𝑎𝑡𝑒 𝑖 ș𝑖 𝑗
Se citesc pe rând coordonatele parcelelor revendicate de fermieri(date prin coordonatele colțului
stânga sus și coordonatele colțului dreapta jos) și se incrementează parcelele din această suprafață.
Cerința 1: se afișează după citire valoarea memorată in coordonatele cerute R si C
int a[181][181]={0}, n, m, p, t, r, c, nrp=0;
f>>p>>n>>m>>t>>r>>c;
for(k=1;k<=t;k++)
{ f>>x>>y>>z>>u;
for(i=x;i<=z;i++)
for(j=y;j<=u;j++)
{a[i][j]++;
nrp=max(nrb,a[i][j]);
}
}
if(p==1)
g<<a[r][c]<<'\n';

Cerința 2: se determină numărul maxim de fermieri care solicită o parcelă, determinând valoarea maximă din
matrice.

if(p==2)
g<<nrp<<'\n';

Cerința 3: pentru a determina cea mai mare suprafață pătratică nerevendicată vom parcurge matricea si la
̅̅̅̅̅
fiecare element a[i][j]=0,(i=1, ̅̅̅̅̅̅
𝑛 și j=1, 𝑚) determinăm o submatrice maximală nulă, care are primul element în
a[i][j].

int dmax=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(a[i][j]==0)
{ ///determin suprafata maxima libiera pe care o pot construi de la i si j
int d=suprafataMax(a,n,m,i,j);
if(d>dmax)
dmax=d;
}
g<<dmax;
Prof. Mihaela Corina ILDEGEZ
Centru pentru pregătire pentru Performanță
Matrice pătratică
Un tablou bidimensional se numește matrice pătratică dacă și numai dacă numărul de linii este egal cu
numărul de coloane. În acest caz apar următoarele
noțiuni și relații:
Diagonala principală(DP):
Pe DP: i == j
Deasupra DP i < j
Sub DP i > j

Diagonala secundară(DS):
Pe DS: i + j == n+1
Deasupra DS: i + j < n+1
Sub DS: i + j > n+1

̅̅̅̅̅
Oricare ar fi i=1, ̅̅̅̅̅
𝑛 și j=1, 𝑛
Zone:

Zona N Deasupra DP + Deasupra DS: i < j and i + j < n+1


Zona E Deasupra DP + Sub DS i < j and i + j > n+1
Zona S Sub DP + Sub DS i > j and i + j > n+1
Zona V Sub DP+ Deasupra DS i > j and i + j > n+1
̅̅̅̅̅
Oricare ar fi i=1, ̅̅̅̅̅
𝑛 și j=1, 𝑛

TEMA:
Ușoare: #1749, #313, #786, #783, #787,

Medii: #781, #794, #784, #81, #998, #729

Concurs #1699, #1082

S-ar putea să vă placă și