我需要一些帮助。我有一个包含以下信息的一维数组:
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.
任何人都可以帮助我吗?我真的很感激。
答案 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;
}