拆分自然数

来源:百度知道 编辑:UC知道 时间:2024/09/21 10:30:44
对一个正整数K,其拆分形式如下:
例:K=4时,有如下拆分:
4=1+1+1+1
4=1+1+2
4=1+2+1
4=2+1+1
4=2+2
4=1+3
4=3+1
编程:输入正整数K,输出拆分形式.
本人是菜鸟,别太难了,最好有说明
要pascal的!!

/*
*把K当作K个苹果排成一排,任何两相邻的苹果可以放一个挡板,
*把挡板有当作1,没有当作0,挡板的状态就可以用一个K-1位二
*进制数表达,对这种二进制数进行枚举就得到全部拆分。
*/
#include <stdio.h>
#include <string.h>

/* 根据array中存放的二进制数确定下一个二进制数,如果没有返回1,否则返回0*/
static int get_next_stat(char *array, int dim)
{
int i;
for(i=0; i<dim; i++) {
if (array[i]==0) {
array[i] = 1;
memset(array, 0, i);
return 0;
}
}
return 1;
}

static int split(int sum)
{
char *s;
int i, cnt;
if (sum<2) {
printf("no solution for value <2\n");
return 0;
}
s = (char *)malloc(sum-1);

if (s==NULL) {
printf("insufficent memory!\n");
return -1;
}
/*初始化二进制数为0*/
memset(s,0, sum-1);

while (get_next_stat(s, sum-1)==0) {
/*根据二进制数计算苹果分配情况*/
cnt = 1;
printf("%d = ", sum);

for(i=0;