基础实验2-2.5 整数分解为若干项之和 (20分)--dfs

 

 

 
#include <stdio.h>
#include <string.h>
int a[31]= {0};
int n,sum=0,num=0,cnt=1;
void dfs(int i) {
    int j,k;
    if(sum==n) {
        printf("%d=",n);
        for(k=0; k<num; k++) {
            if(k>0)
                printf("+");
            printf("%d",a[k]);
        }
        if(cnt%4==0)
            printf("\n");
        else {
            if(a[0]!=n)
                printf(";");
        }
        cnt++;

    }
    for(j=i; j<=n; j++) {
        if(sum>n)return;
        a[num++]=j;
        sum+=j;
        dfs(j);
        num--;//回溯
        sum-=j;//回溯
    }
}
int main() {
    scanf("%d",&n);
    dfs(1);
    return 0;
}

 

 
posted @ 2020-03-04 16:50  跃鱼  阅读(529)  评论(0编辑  收藏  举报