关于自然数的拆分

来源:百度知道 编辑:UC知道 时间:2024/05/22 15:35:23
用不完全归纳法实现任意自然数的拆分

请给我一个可行的算法流程,程序我自己编写

要什么语言的?
C的如下:
#include "stdio.h"
#define MAX 50
int p[MAX]; //每一次算出的组合存在这个数组里
int n;
int print(int num,int i)
{
int j;
int k;
int t;
if(num==0)
{
p[i]=0;
for(k=1;k<=n;k++)
if(p[k]!=0&&p[k]!=n)
printf(",%d",p[k]);
putchar('\n');
return ;
}
else
{
for(j=1;j<=num;j++)
{
p[i++]=j;
p[i]=print(num-j,i);
p[i--]=0;
}

}
}
main()
{

printf("请输入一个大于0的整数:\n");

n=7;
if(n<=0)
{
printf("请输入一个大于0的整数");
return;

}
else
print(n,1);
getch();
}

由于我手里没有queue.h这个文件,所以没把重复的给筛选出来,这个程序运行完了以后会出现重复的组合。我的想法是通过队列来解决,每算一个组合后判断一下是否在队列里有,如果没有的话就插入,有的话就继续运行程序,最后队列里存的是唯一列的组合了。
运行结果如下:
请输入一个大于0的整数:
7
,1,1,1,1,1,1,1
,1,1,1,1,1,2
,1,1,1,1,