Se consideră tabloul bidimensional cu n linii şi n coloane ce conţine numere naturale cu cel mult patru cifre fiecare. Scrieţi programul C/C++ care
citeşte de la tastatură numărul natural n (2≤n≤23) şi cele n*n elemente ale tabloului şi apoi afişează pe ecran elementele primului pătrat concentric, separate prin câte un spaţiu. Pătratul este parcurs în sensul acelor de ceasornic începând din colţul său stânga-sus, ca în exemplu. Primul pătrat concentric este format din prima şi ultima linie, prima şi ultima coloană a tabloului. Exemplu: pentru n=5 şi tabloul alăturat, se va afişa: 1 2 3 4 5 1 6 2 7 6 5 4 3 7 2 6 (10p.)
1 2 3 4 5
6 7 8 9 1
2 3 4 5 6
7 8 9 1 2
3 4 5 6 7
Trebuie Construit ! :D
artur99:
Tu ce ai incercat si nu ai reusit? :D
Răspunsuri la întrebare
Răspuns de
0
Cel mai simplu ar fi sa ai un vector, a carui dimensiune o calculezi in functie de n (do the math) si in care adaugi treptat elementele de pe liniile si coloanele care te intereseaza. Ai grija sa nu adaugi colturile de 2 ori.
Daca nu vrei sa calculezi dimensiunea vectorului poti sa faci un K=0 si pe masura ce parcurgi liniile/coloanele sa faci vector[K++] = element
Daca nu vrei sa calculezi dimensiunea vectorului poti sa faci un K=0 si pe masura ce parcurgi liniile/coloanele sa faci vector[K++] = element
Răspuns de
1
Încearcă asta, nu am stat prea mult și sunt sigur că se poate și mai optim:
#include <fstream>
using namespace std;
ofstream fout("prob.out");
ifstream fin("prob.in");
int m[25][25], n;
void rec(int i, int j)
{
if(i == 1 && j == 1) return;
else {
fout << m[i][j] << ' ';
if(i == 1 && j != n) rec(i, j+1);
else if(j == n && i != n) rec(i+1, j);
else if(i == n && j != 1) rec(i, j-1);
else rec(i-1, j);
}
}
int main()
{
fin >> n;
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
fin >> m[i][j];
fout << m[1][1] << ' ';
rec(1, 2);
}
#include <fstream>
using namespace std;
ofstream fout("prob.out");
ifstream fin("prob.in");
int m[25][25], n;
void rec(int i, int j)
{
if(i == 1 && j == 1) return;
else {
fout << m[i][j] << ' ';
if(i == 1 && j != n) rec(i, j+1);
else if(j == n && i != n) rec(i+1, j);
else if(i == n && j != 1) rec(i, j-1);
else rec(i-1, j);
}
}
int main()
{
fin >> n;
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
fin >> m[i][j];
fout << m[1][1] << ' ';
rec(1, 2);
}
{
if(i == 1 && j == 1) return;
else {
fout << m[i][j] << ' ';
if(j == 1) rec(i-1, j);
else if(i == n) rec(i, j-1);
else if(j == n) rec(i+1, j);
else rec(i, j+1);
}
}
Alte întrebări interesante
Limba română,
8 ani în urmă
Matematică,
8 ani în urmă
Engleza,
8 ani în urmă
Limba română,
9 ani în urmă
Matematică,
9 ani în urmă
Istorie,
9 ani în urmă
Matematică,
9 ani în urmă