Мдя... времени уже прошло много, так что автору ответ возможно и не понадобится, но может он поможет тем кто ищет сейчас.
Собственно, реализация алгоритма генерации следующего
уникального сочетания из N чисел по K в С:
void getNext()
{
int i = K;
while (C[i] + K - i + 1 > N)
--i;
C[i]++;
for (int j = i + 1; j <= K; ++j)
C[j] = C[j-1] + 1;
}
Как известно, количество таких сочетаний вычисляется по формуле:
С(N,K) = N! / (K!*(N-K)!)
Поскольку на множестве этих последовательностей определен лексикографический порядок, то для того чтобы получить все перестановки, необходимо начинать с 1, 2 ... K