Pagini recente » Cod sursa (job #432700) | Cod sursa (job #1044684) | Rating Sterian Cosmin Cristian (steryman) | Cod sursa (job #2977598) | Cod sursa (job #2173798)
#include <inttypes.h>
#include <stdio.h>
#include <string.h>
#define SIZE 18
static uint8_t sol[SIZE+1], n, k;
static void comb(uint8_t l)
{
uint8_t i;
if(l == k) {
for(i = 0; i < k; i++) {
printf("%" PRIu8 "%c", sol[i], " \n"[i == k - 1]);
}
} else {
for(i = sol[l - 1] + 1; i <= n; ++i) {
sol[l] = i;
comb(l + 1);
}
}
}
static void comb_iter(void)
{
int iter[SIZE], lvl[SIZE], lvl_top, nivel, i;
lvl_top = 0;
lvl[lvl_top++] = 0;
memset(iter, 0x00, sizeof iter);
while (lvl_top > 0) {
nivel = lvl[lvl_top - 1];
if (nivel == k) {
for (i = 1; i <= k; i++) {
printf("%" PRIu8 "%c", sol[i], " \n"[i == k]);
}
lvl_top--;
} else {
if (sol[nivel] + 1 + iter[nivel + 1] <= n) {
sol[nivel + 1] = sol[nivel] + 1 + iter[nivel + 1];
iter[nivel + 1]++;
lvl[lvl_top++] = nivel + 1;
} else {
iter[nivel + 1] = 0;
lvl_top--;
}
}
}
}
int main(void)
{
freopen("combinari.in", "r", stdin);
freopen("combinari.out", "w", stdout);
scanf("%" SCNu8 "%" SCNu8, &n, &k);
/*comb(0);*/
comb_iter();
return 0;
}