Cerința
Gigel a descoperit planul unei piramide magice. Planul este reprezentat sub forma unei matrice pătratice de dimensiune n, unde n este impar, în care elementele nule nu aparțin piramidei, iar elementele nenule reprezintă înălțimea piramidei în punctul respectiv.
Vezi exemplul pentru detalii!
Pentru n dat, construiți o matrice care să reprezinte planul unei piramide magice.
Date de intrare
Programul citește de la tastatură numărul n.
Date de ieșire
Programul va afișa pe ecran elementele matricei construite, câte o linie a matricei pe o linie a ecranului, elementele de pe o linie fiind separate prin exact un spaţiu.
Restricții și precizări
3 ≤ n ≤ 101, impar
Exemplu
Intrare
5
Ieșire
0 0 1 0 0
0 1 2 1 0
1 2 3 2 1
0 1 2 1 0
0 0 1 0 0
Da-ti-mi raspunsul in C++.
AntiEaglesDavids:
Mai ai probleme de genu asta? Problemele cu matrici sunt preferatele mele :))
Răspunsuri la întrebare
Răspuns de
1
}#include <iostream> using namespace std; int a[102][102], n; int main(){ cin >>
n; a[1][n/2 + 1] = a[n][n/2+1] = 1
; for(int i = 2 , j = n - 1 ; i <= j ; i ++, j --)
{ a[i][n/2+1] = a[i-1][n/2+1] + 1;
a[j][n/2+1] = a[j+1][n/2+1] + 1;
for(int k = a[i][n/2+1]-1 , p = 1 ; k > 0 ;
k -- , p ++) a[i][n/2+1-p] = a[i][n/2+1+p] = k;
for(int k = a[j][n/2+1]-1 , p = 1 ; k > 0 ;
k -- , p ++) a[j][n/2+1-p] = a[j]
[n/2+1+p] = k;
} for (int i = 1 ;i <= n ; ++i) { for(int j = 1 ; j <= n ;
++j) cout << a[i][j] << " ";
cout << endl; } return 0; }
n; a[1][n/2 + 1] = a[n][n/2+1] = 1
; for(int i = 2 , j = n - 1 ; i <= j ; i ++, j --)
{ a[i][n/2+1] = a[i-1][n/2+1] + 1;
a[j][n/2+1] = a[j+1][n/2+1] + 1;
for(int k = a[i][n/2+1]-1 , p = 1 ; k > 0 ;
k -- , p ++) a[i][n/2+1-p] = a[i][n/2+1+p] = k;
for(int k = a[j][n/2+1]-1 , p = 1 ; k > 0 ;
k -- , p ++) a[j][n/2+1-p] = a[j]
[n/2+1+p] = k;
} for (int i = 1 ;i <= n ; ++i) { for(int j = 1 ; j <= n ;
++j) cout << a[i][j] << " ";
cout << endl; } return 0; }
Răspuns de
2
#include <iostream>
using namespace std;
const int NMAX = 103;
int n;
int v[NMAX][NMAX];
int main()
{
cin >> n;
for(int i=1; i <= n/2+1; i++)
for(int j=n/2+2-i, k=0; j <= n/2+i; j++) {
if(j > n/2+1 ) k--;
else k++;
v[i][j] = k;
v[n-i+1][j] = k;
}
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++)
cout << v[i][j] << ' ';
cout << '\n';
}
return 0;
}
using namespace std;
const int NMAX = 103;
int n;
int v[NMAX][NMAX];
int main()
{
cin >> n;
for(int i=1; i <= n/2+1; i++)
for(int j=n/2+2-i, k=0; j <= n/2+i; j++) {
if(j > n/2+1 ) k--;
else k++;
v[i][j] = k;
v[n-i+1][j] = k;
}
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++)
cout << v[i][j] << ' ';
cout << '\n';
}
return 0;
}
Alte întrebări interesante
Istorie,
8 ani în urmă
Limba română,
8 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă