Прислали тестовое задание, второй день не могу сообразить, что не так делаю. Нужно выбрать все сочетания не повторяющихся элементов по k из n. Но выбрать - второе дело, с этим уже ясно, как. Я не могу перебрать все варианты с повторениями.
Возьмем конкретные k=3 и n=5. Сначала создаю массив, где будет храниться текущая комбинация, заполняю его первыми элементами большого массива - в нашем случае это будет (1,1,1). Потом в цикле прохожу по большому массиву, на каждом шаге прохожу по малому - присваиваю очередному его элементу значение текущего элемента большого массива. Полученную комбинацию отправляю на хранение в итоговый двумерный массив, из которого потом буду выбирать подходящие комбинации:
vector <int> curr_comb;
for(int i=0;i<grouping;i++)
curr_comb.push_back(parsed_numbers[0]);
for(int i=0;i<grouping;i++)
{
for(int j=0;j<len;j++)
{
curr_comb[i]=parsed_numbers[j];
vector <int> *pcurr = &curr_comb;
// if(!repeated(pcurr))
combinations.push_back(curr_comb);
}
}
//grouping - кол-во элементов в группе
//parsed_numbers - массив элементов, len - его длина
Это явно не все возможные. Пробовал обнулять в конце каждого цикла, но получается еще большая лажа. Кажется, где-то здесь порылась рекурсия, но никак не могу понять, где?