Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 通过交替插入上下三角形元素识别矩阵的第n个插入元素_C++_Map_Matrix - Fatal编程技术网

C++ 通过交替插入上下三角形元素识别矩阵的第n个插入元素

C++ 通过交替插入上下三角形元素识别矩阵的第n个插入元素,c++,map,matrix,C++,Map,Matrix,我试图编写一个函数,能够将第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> ge

我试图编写一个函数,能够将第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) ;


}
std::pair getMatrixCoordinates(int元素)
{
返回标准::对(行、列);
}

这只需要一点编程:

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);
}
模板
std::pair getMatrixCoordinates(inti)
{
inta(N-std::sqrt(N*N-i));
int b(i-(2*N-a)*a);
INTC(a+(b+1)/2);
返回标准::配对(b&1?a:c,b&1?c:a);
}

这只需要一点编程:

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);
}
模板
std::pair getMatrixCoordinates(inti)
{
inta(N-std::sqrt(N*N-i));
int b(i-(2*N-a)*a);
INTC(a+(b+1)/2);
返回标准::配对(b&1?a:c,b&1?c:a);
}

除非
n
是一个常数,否则您还需要
n
来进行计算。是的,n是一个已知常数,矩阵是nxn。让我们举个例子13。除非
n
是一个常数,你还需要
n
来进行计算。是的,n是一个已知的常数,矩阵是nxn。让我们举个例子13。我对你的答案很好奇,但我不明白这种运算的原因。你能解释一下这个过程吗?Thanks@Manu343726:你的意思是,对于一个完整的家庭作业,你还需要一个解释,而不仅仅是代码?首先确定对角线位置,然后确定从该位置开始的偏移量,然后确定单元索引,最后将坐标放入正确的位置。奇怪的是,我不再需要家庭作业了。我想你已经把OP和帖子里的评论搞混了……我对你的答案很好奇,但我不明白为什么会这样。你能解释一下这个过程吗?Thanks@Manu343726:你的意思是,对于一个完整的家庭作业,你还需要一个解释,而不仅仅是代码?首先确定对角线位置,然后确定从该位置开始的偏移量,然后确定单元索引,最后将坐标放入正确的位置。奇怪的是,我不再需要家庭作业了。我想你已经把OP和帖子里的评论搞混了。。。