#include<iostream.h>
#include<stdio.h>
int Div(int n, int m);//得到划分数
void out(int sum, int k, int lable);//输出所有划分
int a;//被拆解的数字
int rule[100];
void main()
{
cout << "请输入一个正整数:";
cin >> a;
if(!(a>0))
{
cout<<"error";
return;
}
//cout<<Div(10, 6);
// out(0,0,6);
cout << "共有" << Div(a, a) << "种划分" << endl;
out(0, 0, a);
}
int Div(int n, int m)
{
if ((n<1)||(m<1))
return 0;
if ((n==1)||(m==1))
{
return 1;
}
if (n<m)
return Div(n, n);
if (n==m)
{
return Div(n, m-1)+1;
}
return Div(n, m-1) + Div(n-m, m);
}
//输出
void out(int sum, int k, int lable)
{
if (sum>a)//退出
return;
if (sum==a)
{
int i;
for (i=0; i <k-1; i++)
cout << rule[i] << "+";
cout << rule[i]<<"\n" ;
}//输出
else
{
for (int j=lable; j>0;j--)//配凑
{
rule[k] = j;
sum += j;
out(sum, k + 1, j);//递归
sum -= j;
}
}
}
整数划分(可以输出划分结果)c语言代码
于 2022-02-06 18:46:14 首次发布