Problema 1
Răspuns:
Rezolvare:
#include <iostream>
using namespace std;
int main()
{
unsigned int n;
cin>>n;
unsigned int a[n][n];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(i==j) // diagonala principala
a[i][i]=1;
else
if(j==n-i+1) // diagonala secundara
a[i][j]=1;
else
a[i][j]=2; // restul matricei
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
}
Explicație:
Ai mai multe posibilitati de rezolvare:
1. Fie faci cum am facut eu mai sus si lucrezi doar cu diagonala principala si secundara astfel incat triunghiurile se vor crea de la sine prin instructiunea:
" else
a[i][j]=2; "
2. Fie lucrezi cu cele 4 zone speciale ale matricei
a. triunghiul de deasupra diagonalei principale si secundare ( zona Nord )
b. triunghiul de sub diagonala secundara si deasupra diagonalei principale ( zona Est )
c. triunghiul de sub diagonala secundara si sub diagonala principala ( zona Sud )
d. triunghiul de sub diagonala principala si deasupra diagonalei secundare ( zona Vest )
In interiorul a doua for-uri i si j, ca sa poti accesa aceste zone speciale, poti folosi urmatoarele conditii de verificare ( if (...) ) :
Pentru NORD: i+j<n+1 si i<j
Pentru SUD: i+j>n+1 si i>j
Pentru EST: i+j>n+1 si i<j
Pentru VEST: i+j<n+1 si i>j
P.S. Aceasta nu este singura metoda de rezolvare.
Problema 2
Aplicand explicatiile de la punctul anterior, codul pentru rezolvarea problemei este:
#include <iostream>
using namespace std;
int main()
{
unsigned int n;
cin>>n;
unsigned int a[n][n];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(i==j) // diagonala principala
a[i][i]=0;
else
if(j==n-i+1) // diagonala secundara
a[i][j]=0;
else
if(i+j<n+1 && i<j) // zona N
a[i][j]=1;
else
if(i+j>n+1 && i>j) // zona S
a[i][j]=1;
else
if(i+j>n+1 && i<j) // zona E
a[i][j]=2;
else
if(i+j<n+1 && i>j) // zona V
a[i][j]=2;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
}
Problema 3
#include <iostream>
using namespace std;
int main()
{
unsigned int n;
cin>>n;
unsigned int a[n][n];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(i==j) // diagonala principala
a[i][i]=1;
else
if(j==n-i+1) // diagonala secundara
a[i][j]=1;
else
if(i+j<n+1 && i<j) // zona N
a[i][j]=1;
else
if(i+j>n+1 && i>j) // zona S
a[i][j]=1;
else
if(i+j>n+1 && i<j) // zona E
a[i][j]=2;
else
if(i+j<n+1 && i>j) // zona V
a[i][j]=2;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
}