#include <stdio.h>
int a[1024]; //记录划分出的数 从大到小排列的
void print(int cnt)
{
int i;
for(i=0;i<cnt;i++)
printf("%d\t",a[i]);
putchar('\n');
}
void cut(int n,int limit,int cnt) //把n划分成不大于limit的数 cnt表示已经划分出来的个数
{
if(n==0) print(cnt); //只能划分出0的时候 说明已经无法再划分 就可以输出
else
{
int i;
int min = limit<=n ? limit : n ;
for(i=min ; i>0; i--)
{
a[cnt] = i ; //已经划分出的数 存到全局数组里
cut( n-i, i, cnt+1); //对n-i 划分成不大于i的数 之前已经有cnt个数
}
}
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF && n>0)
cut(n,n,0); //把n划分成不大于n的数 此时已经划分出了0个数
return 0;
}
整数的划分
最新推荐文章于 2018-03-28 15:23:25 发布