整数分割方式
当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);
}
}
}
