Informatică, întrebare adresată de eugenutz29s, 9 ani în urmă

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 Bogdan94
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

eugenutz29s: stiu dar am nevoie de matrice nu vector ...
Răspuns de AntiEaglesDavids
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);
}


AntiEaglesDavids: void rec(int i, int j)
{
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);
}
}
AntiEaglesDavids: varianta mai elegantă este cea de sus :P
Alte întrebări interesante