首页 > 解决方案 > 以特殊顺序填充矩阵 C++

问题描述

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

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;
                    }

标签: c++

解决方案


使用递归:

#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;
   }
}

推荐阅读