Сделать функцию, которая заполнит переданный двумерный массив состоящий из целых чисел по шаблону
Не особо понимаю как это можно реализовать , да и как она строится тоже. Извините за кривую картинку.
Не особо понимаю как это можно реализовать , да и как она строится тоже. Извините за кривую картинку.
Предположим, имеется массив array
, в котором n
строк и m
столбцов, а также есть счетчик k
.
Заполняем каждую четную (i % 2 == 0
) строку:
array[i][j] = k++;
Заполняем каждую нечетную строку (i % 2 == 1
) в обратном порядке:
array[i][m - j - 1] = k++;
То есть заполнение массива можно реализовать примерно следующим образом:
private void fill(int[][] array, int n, int m) {
int k = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
int jj = i % 2 == 0 ? j : m - j - 1;
array[i][jj] = k++;
}
}
}
Может быть два варианта решения для заполнения прямоугольного массива с размерностью r x n
(r
- количество строк, c
- количество столбцов) числами в диапазоне v ∈ [0 .. r * c - 1]
:
arr[r - 1][c - 1]
к началу arr[0][0]
с инкрементом v
arr[0][0]
к концу arr[r - 1][c - 1]
с декрементом v
Для нечётного числа столбцов выбор направления неважен, а для чётного результаты будут отличаться.
Прохождение по массиву выполняется при помощи обычного вложенного цикла, но с учётом "вертикальности" змейки, внешний цикл проходит по столбцам, а внутренний -- по строкам. Индекс строки будет "переворачиваться" для каждого второго столбца.
public static void fillInc(int[][] arr) {
int v = 0;
int r = arr.length;
int c = arr[0].length;
boolean d = true;
for (int i = c; i-- > 0; ) {
for (int j = r; j-- > 0; ) {
int jj = d ? j : r - j - 1;
arr[jj][i] = v++;
}
d = !d;
}
}
public static void fillDec(int[][] arr) {
int r = arr.length;
int c = arr[0].length;
int v = r * c - 1;
boolean d = true;
for (int i = 0; i < c; i++) {
for (int j = 0; j < r; j++) {
int jj = d ? j : r - j - 1;
arr[jj][i] = v--;
}
d = !d;
}
}
Тесты:
int[][] arr = new int[4][7];
fillInc(arr);
print(arr);
arr = new int[5][6];
fillInc(arr);
print(arr);
arr = new int[5][6];
fillDec(arr);
print(arr);
Результаты
[27, 20, 19, 12, 11, 4, 3]
[26, 21, 18, 13, 10, 5, 2]
[25, 22, 17, 14, 9, 6, 1]
[24, 23, 16, 15, 8, 7, 0]
----------
[25, 24, 15, 14, 5, 4]
[26, 23, 16, 13, 6, 3]
[27, 22, 17, 12, 7, 2]
[28, 21, 18, 11, 8, 1]
[29, 20, 19, 10, 9, 0]
----------
[29, 20, 19, 10, 9, 0]
[28, 21, 18, 11, 8, 1]
[27, 22, 17, 12, 7, 2]
[26, 23, 16, 13, 6, 3]
[25, 24, 15, 14, 5, 4]
----------