求正整数n的不同划分个数C语言实现

求正整数n的不同划分个数C语言实现

#include <stdio.h>
int mark[200];
int n;
FILE *fp;
int split(int n ,int m){
    if(m==1){
        return 1;
    }
    if(m>n){
        return split(n,n);
    }
    if(m==n){
        return split(n,m-1)+1;
    }
    return split(n,m-1)+ split(n-m,m);

}
void print(int sum, int k, int prio)
{
    if (sum > n)
        return;
    if (sum == n)
    {
        int i;
        for (i = 0; i < k - 1; i++)
        {
            fprintf(fp,"%d+",mark[i]);
            printf("%d+",mark[i]);
        }
        fprintf(fp,"%d\n",mark[i]);
        printf("%d\n",mark[i]);
    }
    else {
        for (int j = prio; j > 0; j--)
        {
            mark[k] = j;
            sum += j;
            print(sum, k + 1, j);//递归调用
            sum -= j;//恢复现场
        }
    }

}

int main(){
    int m,k;
    printf("请输入需要划分的数字: ");
    scanf("%d",&n);
    printf("请输入最大划分数: ");
    scanf("%d",&m);
    k=split(n,m);
    if( (fp=fopen("demo.txt","w+")) == NULL ){
        puts("Fail to open file!");
    }
    printf("数字是:%d\n",n);
    fprintf(fp,"数字是:%d\n",n);
    print(0,0,n);
    fprintf(fp,"\n");
    printf("\n");
    printf("总共%d种划分方法",k);
    fprintf(fp,"总共%d种划分方法",k);
    fclose(fp);
}

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值