Informatică, întrebare adresată de Utilizator anonim, 9 ani în urmă

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 matem28
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; }


matem28: Am facut si eu pe acolo
matem28: Am editat
matem28: Stati ca mai editez odata
matem28: Sa arate mai frumos
matem28: Gata
AntiEaglesDavids: eh sa zicem ca merge :)))
matem28: :))))
matem28: Mersi
matem28: Le-am facut cam intortocheat dar na :)
matem28: Le-am modificat
Răspuns de AntiEaglesDavids
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;
}




AntiEaglesDavids: mersi :)
Utilizator anonim: antieagles face schimb de puncte
Utilizator anonim: cu sebano
Utilizator anonim: adica tot el este
AntiEaglesDavids: u wot mate?
AntiEaglesDavids: vrei sa zici ca matem e tot sebano sau cum ?
matem28: Cum adica sunt tot sebano?
matem28: Fraților , nu mai dați vina pe mine . Ati de tine a zia
matem28: A zis
matem28: Atunci de ce dai vina pe altul?
Alte întrebări interesante