c·c++/c 프로그래밍

분할수

바로이순간 2014. 2. 26. 14:39

#include <stdio.h>

int partitions=0;

int history[40]={0,};

void p(int n, int k, int level) {

    int i;

    if(n<0) return;

    if(n==0) {

        partitions+=1;

        printf("%d : ", partitions);

        for(i=0;i<level-1;i+=1) {

            printf("%d + ", history[i]);

        }

        printf("%d\n", history[level-1]);

        return;

    }

    for(i=1;i<=k;i+=1) {

        history[level]=i;

        p(n-i, i, level+1);

    }

}

int main() {

    int i, n=5;

    

    scanf("%d", &n);

    for(i=1;i<=n;i+=1) {

        history[0]=i;

        p(n-i, i, 1);

    }

    printf("partitions = %d\n", partitions);


    return 0;

}