Рассмотрим работу с таблицами в языке C++. Под таблицей подразумевается набор из n×mn×m элементов, причём они структурированы в n строк, в каждой из которых по m элементов. К каждому элементу таблицы можно обратиться по номеру его строки и столбца.
Например, рассмотрим таблицу из 5 строк и 6 столбцов, заполненную числами от 0 до 29 по порядку:
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
Тогда значение элемента таблицы, расположенного на второй строке в третьем столбце, — 15 (строки и столбцы таблицы нумеруются с нуля).
Для работы с таблицами в языке C++ используют двумерные массивы. Мы будем их реализовывать через уже знакомый контейнер vector. Создадим таблицу как «вектор векторов»:
vector<vector<int> > t(n, vector<int> (m, 0));
В результате появится таблица tt из nn строк и mm столбцов, заполненная нулями.
Заполним таблицу числами по порядку:
int c = 0;
for (int i = 0; i < n; ++i){
for (int j = 0; j < m; ++j){
t[i][j] = c;
++c;
}
}
Заметим, что можно заполнить таблицу, не используя переменную cc, с помощью формулы:
t[i][j] = i * m + j;
Выведем полученную таблицу на экран:
for (int i = 0; i < n; ++i){
for (int j = 0; j < m; ++j){
cout << t[i][j] << " ";
}
cout << endl;
}
Задача о заполнении таблицы змейкой
Необходимо заполнить таблицу змейкой: строки с чётными номерами заполняем слева направо, а строки с нечётными — справа налево. Например, для таблицы размером 5×6 заполнение змейкой выглядит так:
0 |
1 |
2 |
3 |
4 |
5 |
11 |
10 |
9 |
8 |
7 |
6 |
12 |
13 |
14 |
15 |
16 |
17 |
23 |
22 |
21 |
20 |
19 |
18 |
24 |
25 |
26 |
27 |
28 |
29 |
Решение
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n, m;
cin >> n >> m;
vector<vector<int> > t(n, vector<int> (m));
int now = 0;
for (int i = 0; i < t.size(); ++i){ // количество строк таблицы — t.size()
if (i % 2 == 0){
for (int j = 0;j < t[i].size(); ++j){ //количество элементов на i-й строке — t[i].size()
t[i][j] = now;
++now;
}
}
else{
for (int j = t[i].size() - 1;j >= 0; --j){
t[i][j] = now;
++now;
}
}
}
for (int i = 0; i < t.size(); ++i){
for (int j = 0; j < t[i].size(); ++j){
cout << t[i][j] << " ";
}
cout << endl;
}
return 0;
}