写好好久才写出来.
谢谢pcrazyc的思路:
#include<stdio.h>
int a[100],m;
void find(int k,int l)
{
int i;
if(l==m)
{
if(k<=a[l-1]&&k!=0)
{
for(i=0;i<m;i++)
printf("%d ",a[i]);
printf("%d\n",k);
}
}
else
{
if(l==0)
i=k-m+l;
else
i=k-m+l+1>=a[l-1]?a[l-1]:k-m+l;
for(;i>=k/(m-l+1);i--)
{
a[l]=i;
find(k-i,l+1);
}
}
}
void main()
{
int n;
while(scanf("%d %d",&n,&m)!=EOF)
{
if(m==1)
printf("%d\n",n);
else
{
m--;
find(n,0);
}
}
}
谢谢pcrazyc的思路:
#include<stdio.h>
int a[100],m;
void find(int k,int l)
{
int i;
if(l==m)
{
if(k<=a[l-1]&&k!=0)
{
for(i=0;i<m;i++)
printf("%d ",a[i]);
printf("%d\n",k);
}
}
else
{
if(l==0)
i=k-m+l;
else
i=k-m+l+1>=a[l-1]?a[l-1]:k-m+l;
for(;i>=k/(m-l+1);i--)
{
a[l]=i;
find(k-i,l+1);
}
}
}
void main()
{
int n;
while(scanf("%d %d",&n,&m)!=EOF)
{
if(m==1)
printf("%d\n",n);
else
{
m--;
find(n,0);
}
}
}
[此贴子已经被作者于2007-4-17 20:36:20编辑过]