1

我正在尝试编写一个函数,该函数能够将第 n 个插入的元素映射到矩阵中的 (i,j) 位置。众所周知,填充这个矩阵的方法,是以非标准方式进行的。

(0,0)...(0,1)...(1,0)...(0,2)...(2,0)...(n,0)...(0 ,n)... (1,1)....(1,2)...(2,1)...(n,1)...(1,n) ...( n,n)

换句话说,它从左上角开始,然后在插入对角线元素后,将交替元素插入到上下三角形中,一直穿过外行和列,然后冲洗并重复,因为它步进一行/一列在。

而我想要实现的是一个功能

std::pair<int,int> getMatrixCoordinates (int nthElement)
{

return std::pair<int,int> (row, col) ;


}
4

1 回答 1

1

这只需要一点编程:

template <int N>
std::pair<int, int> getMatrixCoordinates(int i)
{
    int a(N - std::sqrt(N * N - i));
    int b(i - (2 * N - a) * a);
    int c(a + (b + 1) / 2);
    return std::make_pair(b & 1? a: c, b & 1? c: a);
}
于 2013-08-26T12:38:14.883 回答