整数划分(可以输出划分结果)c语言代码

#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;
}

}


}

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值