#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void filewrite(int* a,int top2)
{
int i;
FILE *pFile;
pFile=fopen("output.txt","a+");
for(i=0; i<top2-1; i++)
{
fprintf(pFile,"%d+",a[i]);
}
fprintf(pFile,"%d\n",a[i]);
fclose(pFile);
return;
}
void partion(int top1,int top2,int limit,int *a,int count,int min,int max)
{
int i=0;
if(top1==0) //如果s1中已无元素,则划分完毕,输出
{
if(limit==count) //限制显示结果为输入的个数
filewrite(a,top2);
}
else
{
for(i=top1; i>=1; i--)
{
if(top2==0||i<=a[top2-1])
{
a[top2]=i; //从s1中取出的1的个数压入s2
if(a[top2]!=a[top2-1] && a[top2] <= max && a[top2] >= min ) //比较是否和之前的值一样,如果一样就跳过递归,重新调用一次递归
{
partion(top1-i,top2+1,limit,a,count+1,min,max); //对s1中剩下的1再次进行取栈操作
}
}
}
}
}
int Param;
int main(int argc,char ** argv)
{
int top1,top2,limit,count,min,max; //
int *a;
FILE *pFile;
pFile= fopen("output.txt","w");
if(pFile!=NULL)
fclose(pFile);
top1=atoi(argv[1]); // 分解数
limit=atoi(argv[2]); // 限制个数
min=atoi(argv[3]); // 最小数
max=atoi(argv[4]); // 最大数
Param=1;
while(Param--==1&&top1>=0)
{
top2=0;
count=0;
a=(int *)malloc(top1*sizeof(int));
printf("--------------Start--------------\n");
partion(top1,top2,limit,a,count,min,max);
}
return 0;
}