从另一个数组C ++创建一个数组

时间:2014-02-04 15:14:36

标签: c++ arrays for-loop nested

我需要一些帮助。我有一个包含以下信息的一维数组:

1, 17, 2, 18, 3, 19, 1, 17, 2, 18, 3, 19, 1, 17, 2, 18, 3, 19, 1, 17, 2, 18, 3, 19

如您所见,数组中总共有24个元素。现在,前两个元素(1,17)可以被认为是一对,所以基本上我们在一个块中有(1, 17), (2, 18), (3, 19)对。我们总共有4个块给出了上面的数组。

现在,我必须按照以下顺序排列数组:

1, 17, 1, 17, 1, 17, 1, 17, 2, 18, 2, 18, 2, 18, 2, 18, 3, 19, 3, 19, 3, 19, 3, 19.

正如你所看到的,我必须选择第一对,插入4次(4是我们拥有的块数),然后转到下一对(2, 18),插入4次并继续。

现在,#块和#对可以是动态的。例如,如果我有3个块和4个对,

原始数组将是这样的:

1, 17, 2, 18, 3, 19, 4, 20  1, 17, 2, 18, 3, 19, 4, 20, 1, 17, 2, 18, 3, 19, 4, 20

所需的数组将是这样的:

1, 17, 1, 17, 1, 17, 2, 18, 2, 18, 2, 18, 3, 19, 3, 19, 3, 19, 4, 20, 4, 20, 4, 20.

另一个例子,

如果我有两个街区和五个街区:

原始数组将是:

1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21,

所需的数组将是:

1, 17, 1, 17, 2, 18, 2, 18, 3, 19, 3, 19, 4, 20, 4, 20, 5, 21, 5, 21.

任何人都可以帮助我吗?我真的很感激。

1 个答案:

答案 0 :(得分:0)

Hacky版本可能有所帮助:

#include <algorithm>
#include <utility>

int main(int argc, char *argv[])
{
    int array[] = {1, 17, 2, 18, 3, 19, 1, 17, 2, 18, 3, 19, 1, 17, 2, 18, 3, 19, 1, 17, 2, 18, 3, 19};
    typedef std::pair<int, int> (p_t)[sizeof(array) / sizeof(array[0]) / 2];
    p_t &p = reinterpret_cast<p_t&>(array);

    std::sort(std::begin(p), std::end(p));

    for (auto i : array) {
        std::cout << i << " ";
    }
    return 0;
}