Clasa a X-a · Tablouri bidimensionale (matrice)Read in English
Generarea matricei în serpentină în C++
În engleză: Generating a serpentine (zigzag) matrix
Ideea
Completăm matricea cu numerele 1, 2, ..., n * m „în zigzag”: liniile impare de la stânga la dreapta, liniile pare de la dreapta la stânga. Un contor val crește la fiecare element scris; doar sensul în care mergem pe coloane depinde de paritatea liniei.
Descrierea în engleză
We fill the matrix with the numbers 1, 2, ..., n * m in a zigzag: odd rows from left to right, even rows from right to left. A counter val grows with every element written; only the direction we walk the columns depends on the parity of the row.
- Complexitate
- O(n * m)
- Clasa
- Clasa a X-a (Grade 10)
Exemple
Intrare
3 4
Ieșire așteptată
1 2 3 4 8 7 6 5 9 10 11 12
Intrare
2 2
Ieșire așteptată
1 2 4 3
Codul C++
Codul complet, cu comentarii în română. Îl poți modifica liber și îl poți reseta oricând.
/*
* Titlu: Generarea matricei în serpentină
* Clasa: 10
* Capitol: Tablouri bidimensionale (matrice)
* Descriere: Completăm matricea cu numerele 1, 2, ..., n * m „în zigzag”: liniile
* impare de la stânga la dreapta, liniile pare de la dreapta la stânga.
* Un contor val crește la fiecare element scris; doar sensul în care
* mergem pe coloane depinde de paritatea liniei.
* Complexitate: O(n * m)
*
* Exemplu
* Intrare: 3 4
* Ieșire:
* 1 2 3 4
* 8 7 6 5
* 9 10 11 12
*
* Exemplu
* Intrare: 2 2
* Ieșire:
* 1 2
* 4 3
*/
#include <iostream>
using namespace std;
int a[101][101];
int main()
{
int n, m, val = 1;
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
if (i % 2 == 1)
{
for (int j = 1; j <= m; j++)
a[i][j] = val++;
}
else
{
for (int j = m; j >= 1; j--)
a[i][j] = val++;
}
}
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
cout << a[i][j] << ' ';
cout << '\n';
}
return 0;
}
Rulează pe un g++ adevărat (C++17, -O2) prin Compiler Explorer. Programele trebuie să se termine repede: există o limită de timp.