Cod sursa(job #590392)

Utilizator ukiandreaAndreea Lucau ukiandrea Data 17 mai 2011 11:37:15
Problema Submultimi Scor 50
Compilator c Status done
Runda Arhiva educationala Marime 1.04 kb
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>

void print_set(uint8_t *a, uint8_t len)
{
    uint8_t i;

    for (i = 0; i < len; ++i)
        printf("%d ", a[i]);
    printf("\n");
}

int valid_set(uint8_t *a, uint8_t index)
{
    uint8_t i;

    for (i = 0; i < index; ++i)
        if (a[i] >= a[index])
            return 0;

    return 1;
}

void sets(uint8_t *a, uint8_t len, uint8_t k, uint8_t index)
{
    uint8_t i;

    if (index == k)
        print_set(a, k);
    else
    {
        for (i = 1; i <= len; ++i)
        {
            a[index] = i;
            if (valid_set(a, index))
                sets(a, len, k, index + 1);
        }
    }
}

int main()
{
    uint8_t n = -1, k = 0, *a = NULL;

    freopen("submultimi.in", "r", stdin);
    freopen("submultimi.out", "w", stdout);

    scanf("%c", &n);

    n = n - '0';

    a = (uint8_t*)calloc(n, sizeof(uint8_t));

    for (k = 1; k <= n; k++)
    {
        memset(a, 0, n * sizeof(uint8_t));
        sets(a, n, k, 0);   
    }
        
    free(a);

    return 0;
}