m0_62748825 2021-12-17 16:40 采纳率: 88.9%
浏览 28
已结题

C语言初学者的疑惑,不会,要求用递归

对于任意一个正整数n,总是可以找出正整数看k1、k2…,使得这些数想加刚好等于n,而且每个数都不超过指定数m。
问:对于给定的n,请找出共有多少中这样的求和式
注意;
设a,b不相等,则认为a+b与b+a是不同的求和式;
n=n也是一种求和式
例如:
n=4,m=2。
4=1+1+1+1
4=1+1+2
4=1+2+1
4=2+1+1
4=2+2

  • 写回答

2条回答 默认 最新

  • 五一编程 2021-12-17 16:53
    关注
    
    #include <stdio.h>
    
    int cnt=0;
    
    void comb(int a[],int m,int k,int s) 
    {
        int i,j,t;
        for(i=m;i>=k;i--)
        {
            a[k]=i;
    
            if(k>1)
                comb(a,i-1,k-1,s);
            else
            {
                for(t=0,j=a[0];j>0;j--)
                    t=t+a[j];
                
                if(t==s)
                {
                    cnt++;
                    printf("%d=", s);
                    for(j=a[0];j>1;j--)
                    printf("%d+", a[j]);
                    printf("%d\n", a[1]);
                }
            }
        }
    }
    
    int main()
    {
        int a[100],s,m,i;
        while (1)
        {
            scanf("%d %d", &s, &m);
            if (s == 0)
            {
                break;
            }
            
            cnt=0;
            for (i=1;i<=m;i++)
            {
                a[0]=i;
                comb(a,m,i,s);
            }
                printf("%d\n", cnt);
        }
        return 0;
    }
    

    运行结果:

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月25日
  • 已采纳回答 12月17日
  • 创建了问题 12月17日

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?