编程序求某一数的所有分解数,如输入7,则输出:(要求输出不能重复)
7=6+1 7=4+1+1+1 7=2+3+2
7=5+2 7=3+3+1 7=2+2+2+1
7=5+1+1 7=3+2+2 7=2+2+1+1+1
7=4+3 7=3+2+1+1 7=2+1+1+1+1+1
7=4+2+1 7=3+1+1+1+1 7=1+1+1+1+1+1+1
#include <stdio.h> #include <stdlib.h> #include <conio.h>
void split_addition(int org_n,int n,int pos,int fillsize,int size,int *container);
int main() { int n; int *c; printf("Input a number :"); scanf("%d",&n); if(n<=0) { printf("Invaild input\n"); return 0; } else { c=(int*)malloc(n*sizeof(int)); if(!c) { printf("Cannot allocate memory!\n"); return 0; } split_addition(n,n,0,0,n,c); free(c); } getch(); return 1; }
void split_addition(int org_n,int n,int pos,int fillsize,int size,int *container) { if(n!=1) { register int i; for(i=1;i<n;i++) { container[pos]=i; pos++; n-=i; fillsize++; split_addition(org_n,n,pos,fillsize,size,container); pos--; fillsize--; n+=i; } } else { register int i; printf("%d=",org_n); for(i=0;i<fillsize;i++) { if(container[i]) { printf("%d",container[i]); printf("+"); } } printf("%d\n",n); } } 总觉得这个递归算法写得不太好,没有去除重复的答案,请高手指点。。。。。。
[此贴子已经被作者于2005-3-23 19:25:28编辑过]