以特殊顺序C ++填充矩阵

时间:2018-08-23 16:46:42

标签: c++

我想用特殊顺序的值填充8 x 8矩阵(请参见下面的示例),但是我不知道该怎么做。每个数字代表订购号:例如:矩阵中的#3是e的第三个值。我要添加的测量。 订单应为:

1   2   5   6    17  18  21  22
3   4   7   8    19  20  23  24
9   10  13  14   25  26  29  30
11  12  15  16   27  28  31  32

33  34  37  38   49  50  53  54
35  36  39  40   51  52  55  56
41  42  45  46   57  58  61  62  
43  44  47  48   59  60  63  64

有人知道这样做的算法吗? 我已经尝试过了,但这并不是一个好方法,它不适用于整个矩阵

int b= 0, ii = 0, a = 0, iii = 0


i are different measurement values

and now a for loop  


                    if (ii == 1)
                    {
                        b++;

                    }
                    if (ii == 2)
                    {
                        a++, b--;

                    }
                    if (ii == 3)
                    {
                        b ++;

                    }
                    tempMatrix[a][b] = i;
                    cout << "TempMatrix " << tempMatrix[a][b] << "   a " << a << "  b " << b << endl;
                    if (ii == 3)
                    {
                        ii = -1;

                        a --;
                        b ++;

                    }
                    if (iii == 7)
                    {
                        a = a + 2;
                        b = 0;
                        iii = -1;
                    }

2 个答案:

答案 0 :(得分:1)

使用递归:

#include <iostream>

using namespace std;

void f(int a[8][8], int current, int x, int y, int size) {
    if (size == 1) {
        a[x][y] = current;
        return;
    } else {
        size /= 2;
        int add_for_each_square = size * size;
        f(a, current, x, y, size);
        f(a, current + add_for_each_square, x, y + size, size);
        f(a, current + 2 * add_for_each_square, x + size, y, size);
        f(a, current + 3 * add_for_each_square, x + size, y + size, size);
    }
}

int main() {
   int a[8][8];
   f(a, 1, 0, 0, 8);
   for (int i = 0; i < 8; ++i) {
       for (int j = 0; j < 8; ++j) {
           cout << a[i][j] << " ";
       }
       cout << endl;
   }
}

答案 1 :(得分:0)

如果矩阵将始终为固定大小,则可以为矩阵中的行索引和列索引生成两个查找表。然后,只需将索引通过这些表即可获得矩阵中所需的位置。

const auto MATRIX_SIZE = 8;
const std::array<int, MATRIX_SIZE*MATRIX_SIZE> row_lookup = {{...}}; //put pre-computed values here. 
const std::array<int, MATRIX_SIZE*MATRIX_SIZE> col_lookup = {{...}};

for(size_t i = 0; i < MATRIX_SIZE * MATRIX_SIZE; i++)
{
    auto val = get_coefficient(i);
    auto row = row_lookup[i];
    auto col = col_lookup[i];

    mat[col][row] = val;
}