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)

つまり、左上から開始し、対角要素を挿入した後、外側の行と列を横切って上と下の三角形に要素を交互に挿入し、すすぎ、1 行 1 列をステップで繰り返します。の。

そして、私が達成しようとしているのは関数です

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 に答える