2017-02-22 14 views
0

У меня есть следующий массив:
int a[3]={1, 2, 3};
примечание: Я не знаю, сколько элементов в массиве.
Попытка сделать каждый номер возможность с цифрами от массива

Я хочу вывести

123; 132; 213; 231; 312; 321.

Однако я не знаю, сколько цифр найдено в массиве. Также нельзя повторять одну и ту же цифру.

+0

Если вы действительно писать на C++, и вы «не знаете, сколько элементов в массиве,» вы должны использовать 'зЬй :: вектор a {1, 2, 3}; '. В любом случае вопрос, написанный как OT для SO, см. В [mcve] для деталей. –

+4

Возможно, вы ищете ['std :: next_permutation'] (http://en.cppreference.com/w/cpp/algorithm/next_permutation) –

ответ

0

Итак, его перестановка. У вас есть N! permuations.

Проще всего написать функцию рекурсивно, перечислить первую цифру, затем вторую от N-1, третью от N-2 и так далее.

2

Как комментарий говорит, что это звучит, как вы хотите std::next_permutation, вот как его использовать:

int main() 
{ 
    std::vector<int> a{ 1, 2, 3 }; 

    std::sort(a.begin(), a.end()); 
    do { 
     std::cout << a << "; "; 
    } while (std::next_permutation(a.begin(), a.end())); 

    return 0; 
} 

Обратите внимание, что вам нужно перегрузку operator<<():

std::ostream& operator<<(std::ostream& s, const std::vector<int>& v) 
{ 
    for (auto&& item : v) 
     s << item; 
    return s; 
} 

Выход этой программы is

123; 132; 213; 231; 312; 321;

Вы можете даже сделать небольшую утилиту рутина:

void permutations(std::ostream& s, std::vector<int> a) 
{ 
    std::sort(a.begin(), a.end()); 
    do { 
     s << a << "; "; 
    } while (std::next_permutation(a.begin(), a.end())); 
} 

permutations(std::cout, a); 
std::cout << "\n"; 
permutations(std::cout, { 3, 1, 4, 2 });