קוד:
#include <stdio.h>
#include <stdlib.h>
void sort_r(char arr[], int cur_index, int n, int k) {
if (n == 0) { /* Stopping condition */
if (k == 0) { /* This makes sure we have a legal combination */
int i;
for (i = 0; i < cur_index; ++i) {
printf("%c", arr[i]);
}
printf("\n"); /* Line down between every combination */
}
return;
}
/* Lets get to work then... */
arr[cur_index] = '0'; /* Assume first is zero */
sort_r(arr, cur_index +1, n - 1, k); /* len-1, same amount of students */
arr[cur_index] = '1'; /* Assume first is one [Notice we overwrite the 0] */
if (n > 1) { /* This IF comes to prevent overflow... */
arr[cur_index + 1] = '0'; /* Make sure we keep a break of 1 seat.. */
sort_r(arr, cur_index + 2, n - 2, k - 1);
/* len - 2 (we took 2 seats now), students -1 */
}
else {
sort_r(arr, cur_index + 1, n - 1, k - 1);
}
}
void sort_students(int n, int k) {
/* This functions purpose in life is to properly start our recurssion.
* This function doesn't have to exist, however, I recommend it... */
char* arr = (char*)malloc(n*sizeof(char));
/* Dynamic allocation, you don't have to use it, I guess */
if (arr == NULL) {
exit(1); /* If allocation fails, exit */
}
sort_r(arr, 0, n, k);
free(arr);
}
int main(void) {
int n,k;
printf("Please enter the number of tables(n): ");
scanf("%d", &n);
printf("Please enter the number of students(k): ");
scanf("%d", &k);
printf("____ Here go the cominations: ____\n");
sort_students(n,k);
system("pause"); /* Stop before closing the consol window... */
return 0;
}