Я предполагаю, что под «растяжкой» вы подразумеваете, что вы кладете строки рядом друг с другом, чтобы сформировать 1-й вектор, как в
для 3x4
матрицы
a00 a01 a02 a03
a10 a11 a12 a13
a20 a21 a22 a23
вас растяните его в 1-й вектор, например:
a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23
Теперь, получив k
индекс в указанном выше векторе, как вы получите соответствующий (i,j)
в сетке N x M
?
Вы можете получить их по
i = k / M
j = k - i*M
, где M
- количество столбцов
. Вы можете проверить:
для k = 7 (a13)
=> i = 7/4 = 1
и j = 7 - (1*4) = 3
=> (1,3)
для k = 1 (a01)
=> i = 1/4 = 0
и j = 1 - 0*4 = 1
=> (0,1)
для k = 9 (a21)
=> i = 9/4 = 2
и j = 9 - 2*4 = 1
=> (2,1)
Пример кода в Java выглядит следующим образом:
private static void printPositions(int N, int M) {
int count = 0;
for ( int k = 0; k < N*M; k++ ) {
int i = k/M;
int j = k - i*M;
System.out.print( "(" + i + ", " + j + ")" + " " );
count++;
if ( count == M ) {
System.out.println();
count = 0;
}
}
}
И вывод для различных значений N
и M
:
printPositions(3, 4) :
(0, 0) (0, 1) (0, 2) (0, 3)
(1, 0) (1, 1) (1, 2) (1, 3)
(2, 0) (2, 1) (2, 2) (2, 3)
printPositions(4, 6) :
(0, 0) (0, 1) (0, 2) (0, 3) (0, 4) (0, 5)
(1, 0) (1, 1) (1, 2) (1, 3) (1, 4) (1, 5)
(2, 0) (2, 1) (2, 2) (2, 3) (2, 4) (2, 5)
(3, 0) (3, 1) (3, 2) (3, 3) (3, 4) (3, 5)
printPositions(1, 5) :
(0, 0) (0, 1) (0, 2) (0, 3) (0, 4)