Я пытаюсь написать функцию, которая переставляет массив.Перестановка по циклу
Однако, если offset
больше нуля, один из элементов не заменяется на A[i]
, и я просто остаюсь с инициализированным значением по умолчанию. Я не могу понять, где проблема. Функции fill
и print
в коде - это просто функции, которые заполняют массив случайными элементами и печатают массив.
#include <iostream>
#include "print.h"
#include "random.h"
#include <memory>
int* permute_by_cycle(int A[], int size)
{
int dest;
int* C = new int[size];
int last = size - 1;
int offset = random(0, last);
std::cout << "offset = " << offset << std::endl;
for(int i = 0; i < size; i++) {
dest = i + offset;
//std::cout << "dest = " << dest << "\tlast = " << last << std::endl;
if(dest > last)
dest -= last;
C[dest] = A[i];
}
return C;
}
int main()
{
int size = 18;
int A[size];
//int* B = new int[size];
fill(A,size);
print(A,size);
int* B = permute_by_cycle(A, size);
print(B,size);
delete [] B;
return 0;
}
выход:
41 65 31 41 19 15 72 11 78 69 37 23 29 63 75 4 5 49
offset = 16
0 31 41 19 15 72 11 78 69 37 23 29 63 75 4 5 49 65
Вы пробовали 'зЬй :: next_permutation'? Может быть полезно (если вы просто не хотите реализовать алгоритм, конечно). – Aleph
Нет, нет. Я пытался реализовать алгоритм, но я также посмотрю на это. – Ares