整数分割方式
当n=7时有如下分割7
6 1
5 2
5 1 1
4 3
4 2 1
4 1 1 1
3 2 2
3 2 1 1
3 1 1 1 1
2 1 1 1 1 1
1 1 1 1 1 1 1
有哪位大侠给个思路
#include <stdio.h> #include <stdlib.h> #include <assert.h> void Print(int num); //打印函数 void Split( int num, int sum); //分割函数 int n,*p,*q,count; int main(int argc, char *argv[]) { int i; scanf("%d",&n); if(n <= 1) { printf("%d\n",n); system("PAUSE"); return 0; } p = (int *) calloc(n , sizeof(int)); q = (int *) calloc(n , sizeof(int)); assert(p != NULL || q != NULL); for(i = 1;i < n; ++i) { p[i] = n/i; } count=0; //sum = 0; Split(n-1,0); printf("共有%d中分割方法 !\n",count); free(p); free(q); system("PAUSE"); return 0; } void Print(int num) { int i,j; for(i = n-1; i>= num; --i) { for (j = 1; j <= q[i];++j) { printf("%d ",i); } } printf("\n"); } void Split( int num, int sum) { int i; if(num == 1) { q[num] = n - sum; Print(num); ++count; return; } for(i = p[num];i >= 0; --i) { if((sum + num*i) > n) continue; if((sum + num*i) == n) { q[num] = i; Print(num); ++count; } else { q[num] = i; Split(num - 1,sum + num * i); } } }