Cerința
Scrieți un program care citește de la tastatură un număr natural n
și construiește o matrice cu n
linii și n
coloane ale cărei elemente vor primi valori dupa cum urmează:
- În colțul din stânga sus, de coorodnate
1 1
, va fi1
. - În pozițiile adiacente, de coordonate
1 2
și2 1
, va fin
. - În pozițiile adiacente, de coordonate
1 3
,2 2
și3 1
, va fi2
. - În pozițiile adiacente, de coordonate
1 4
,2 3
,3 2
și4 1
, va fin-1
. - Și așa mai departe…
- În penultimele poziții, de coordonate
n-1 n
șin n-1
, va fin
. - În ultima poziție, de coordonate
n n
, va fi1
.
Date de intrare
Programul citește de la tastatură numarul n
.
Date de ieșire
Programul afișează pe ecran matricea construită, câte o linie a matricei pe câte o linie a ecranului, elementele fiecărei linii fiind separate prin câte un spaţiu.
Restricții și precizări
3 ≤ n ≤ 30
Exemplu
Intrare
5
Ieșire
1 5 2 4 3 5 2 4 3 4 2 4 3 4 2 4 3 4 2 5 3 4 2 5 1
Explicație
S-a citit 5
și se afisează o matrice de 5
linii și 5
coloane, unde 1
se află in colțul din stânga sus, apoi în pozițiile învecinate se află 5
, apoi 2
și tot așa până se va completa matricea.
#include <bits/stdc++.h> using namespace std; int n, di[]={0,0,-2,2,1,-1}, dj[]={-2,2,0,0,1,-1}, a[101][101]; bool inmat(int i, int j){ return i <= n && j <= n && i >= 1 && j >= 1; } queue<pair<int, pair<int, int>>> Q; void lee(){ while(!Q.empty()){ int cost = Q.front().first; int i = Q.front().second.first; int j = Q.front().second.second; for(int d = 0; d <= 5; ++d){ int inou = i + di[d]; int jnou = j + dj[d]; if(inmat(inou, jnou) && a[inou][jnou] == 0){ a[inou][jnou] = cost + 1; Q.push({cost + 1, {inou,jnou}}); } } Q.pop(); } } void lee1(){ while(!Q.empty()){ int cost = Q.front().first; int i = Q.front().second.first; int j = Q.front().second.second; for(int d = 0; d <= 5; ++d){ int inou = i + di[d]; int jnou = j + dj[d]; if(inmat(inou, jnou) && a[inou][jnou] == 0){ a[inou][jnou] = cost - 1; Q.push({cost - 1, {inou,jnou}}); } } Q.pop(); } } int main(){ cin >> n; Q.push({1, {1,1}}); Q.push({1, {n,n}}); a[1][1] = 1, a[n][n] = 1; a[2][1] = n, a[n][n-1] = n; a[1][2] = n, a[n-1][n] = n; lee(); Q.push({n, {2, 1}}); Q.push({n, {1, 2}}); Q.push({n, {n, n-1}}); Q.push({n, {n-1, n}}); lee1(); for(int i = 1; i <= n; ++i, cout << '\n') for(int j = 1; j <= n; ++j) cout << a[i][j] << ' '; return 0; }