69,336
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <malloc.h>
int *pn;
int num;
void output()
{
int i=1;
if (pn[0] != num)
{
printf("%d = %d", num, pn[0]);
while(pn[i]!=0 && i<num)
printf(" + %d", pn[i++]);
printf("\n");
}
}
void decompose(int num, int *n, int max)
{
int i;
if (num<=max)
{
n[0] = num;
output();
}
for (i=(max<num? max: num-1); i>0; i--)
{
n[0] = i;
decompose(num - i, &n[1], i);
}
n[0] = 0;
}
void main()
{
int i;
printf("Please input a integer: ");
scanf("%d", &num);
printf("%d = %d\n", num, num);
pn = (int*)malloc(sizeof(int) * num);
if (pn)
{
for (i=0; i<num; i++) pn[i] = 0;
decompose(num, pn, num);
free(pn);
}
else
{
printf("Out memory\n");
}
}
如:
Please input a integer: 10
10 = 10
10 = 9 + 1
10 = 8 + 2
10 = 8 + 1 + 1
10 = 7 + 3
10 = 7 + 2 + 1
10 = 7 + 1 + 1 + 1
10 = 6 + 4
10 = 6 + 3 + 1
10 = 6 + 2 + 2
10 = 6 + 2 + 1 + 1
10 = 6 + 1 + 1 + 1 + 1
10 = 5 + 5
10 = 5 + 4 + 1
10 = 5 + 3 + 2
10 = 5 + 3 + 1 + 1
10 = 5 + 2 + 2 + 1
10 = 5 + 2 + 1 + 1 + 1
10 = 5 + 1 + 1 + 1 + 1 + 1
10 = 4 + 4 + 2
10 = 4 + 4 + 1 + 1
10 = 4 + 3 + 3
10 = 4 + 3 + 2 + 1
10 = 4 + 3 + 1 + 1 + 1
10 = 4 + 2 + 2 + 2
10 = 4 + 2 + 2 + 1 + 1
10 = 4 + 2 + 1 + 1 + 1 + 1
10 = 4 + 1 + 1 + 1 + 1 + 1 + 1
10 = 3 + 3 + 3 + 1
10 = 3 + 3 + 2 + 2
10 = 3 + 3 + 2 + 1 + 1
10 = 3 + 3 + 1 + 1 + 1 + 1
10 = 3 + 2 + 2 + 2 + 1
10 = 3 + 2 + 2 + 1 + 1 + 1
10 = 3 + 2 + 1 + 1 + 1 + 1 + 1
10 = 3 + 1 + 1 + 1 + 1 + 1 + 1 + 1
10 = 2 + 2 + 2 + 2 + 2
10 = 2 + 2 + 2 + 2 + 1 + 1
10 = 2 + 2 + 2 + 1 + 1 + 1 + 1
10 = 2 + 2 + 1 + 1 + 1 + 1 + 1 + 1
10 = 2 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1
10 = 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1
Press any key to continue