Re[4]: Microsoft interviews in Moscow!
От: lxa http://aliakseis.livejournal.com
Дата: 28.02.05 10:17
Оценка:
Здравствуйте, Starlight, Вы писали:

...

S>3. Дан массив целых чисел int A[N]. Напечатать все возможные перестановки (каковых будет N!). Алгоритмов можно придумать много, но меня еще дополнительно попросили алгоритм без выделений дополнительной памяти и in-place.


...

Алгоритм 3 без выделений дополнительной памяти и in-place показался тяжеловатым для интервью под стрессом. Вот что удалось придумать ничем не пользуясь:


#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

int main(int argc, char* argv[])
{
    bool stop = argc < 2;
    for (int i = 1; !stop; ++i)
    {
//    output
        int j;
        for(j = 1; j < argc; ++j)
            cout << argv[j] << ((j == argc - 1)? "\n" : " ");

        j = 2;
        for (int buf = 2; 0 == (i % buf); buf *= (++j))
            ;
        j = argc - j;
        if (j < 1) 
        {
            j = 1;
            stop = true;
        }
        reverse(argv + j, argv + argc);
    }

    return 0;
}


Казалось бы просто, но пришлось-таки поломать голову. Непонятно, что, может, попроще, мог упустить и где?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.