Вывести всевозможные комбинации из n-чисел размером k - C (СИ)

Формулировка задачи:

Вводим в программе n и k n - кол-во цифр (1, 2, 3,...,n) k - длинна выводимой комбинации (если k=3, то должны получать 123, 124, 125..и тд) Цифры в комб. должны идти по возростанию Через итерацию либо рекурсию нужно проделать вывод всех возможных таких комбинаций Понятное дело что код нужно строить через внутренние цыклы, но у меня руки дошли писать кол-во циклов равное k
for (int i = 1; i < 10; i++)
  for (int j = i + 1; j < 10; j++)
    for (int k = j + 1; k < 10; k++)
      printf("%d%d%d \n", i, j, k);
Нужно универсальный код для всех k и n Буду крайне благодарен за помощь

Код к задаче: «Вывести всевозможные комбинации из n-чисел размером k - C (СИ)»

textual
#include <stdio.h>
 
const int n1=20;
int k,n,a[n1],p[n1];
 
void cnk(int m,int l) {
 //m-сколько осталоась выбрать,l - номер элемента с которого начниаем
 int i,j;
 if (m==0) { //Здесь - обработка комбинации
  printf ("\n");
  for (j=0;j<k;j++) printf ("%d ",p[j]);
 }
 else for (i=l;i<=n-m;i++) {
   p[k-m]=a[i];
   cnk(m-1,i+1);
 }
}
 
int main ()  {
 printf ("\nПодмножества из N по K");
 printf ("\nВведите N (2-%d):",n1);
 fflush (stdin);
 scanf("%d",&n);
 printf ("\nВведите K:");
 fflush (stdin);
 scanf("%d",&k);
 for (int i=0;i<n;i++) a[i]=i+1; //данный массив может быть заполнен произвольно
 cnk(k,0);
 fflush (stdin); getchar();
}
Эта работа вам не подошла?

Вы всегда можете заказать любую учебную работу у наших авторов от 20 руб.

10   голосов, оценка 4.400 из 5


СДЕЛАЙТЕ РЕПОСТ