1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| #include<cstdio> #include<cstring> #include<algorithm> #include<set> #include<queue> #include<cmath> #include<cstdlib> #define MAX 100
using namespace std;
int diviscount;
void division(int *A, int len, int n, int m) { if(n<0 || m<=0)return; if(n == 0) { diviscount++; for(int i=0; i<len; i++) { printf("%d,", A[i]); } printf("\n"); return; } if(m > n) { division(A, len, n, n); } else if(m == 1) { A[len] = 1; division(A, len+1, n-1, 1); } else { A[len] = m; division(A, len+1, n-m, m); division(A, len, n, m-1); } }
int main() { int a[MAX]; diviscount = 0; division(a, 0, 5, 4); printf("division count = %d\n", diviscount); return 0; }
|