matlab把一个整数分解成n个数的和

fuhan3288 2013-03-07 10:47:09
递归思想,求代码!
如果没有代码 指导思想也行!
...全文
1649 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fuhan3288 2013-03-13
  • 打赏
  • 举报
回复
好吧,还是谢谢了~
赵4老师 2013-03-11
  • 打赏
  • 举报
回复
所以才说“仅供参考”嘛。
fuhan3288 2013-03-10
  • 打赏
  • 举报
回复
好像不大一样,我要的是将n分成N个数的和,这N个数可以为0,可以重复,相加等于n就好
赵4老师 2013-03-07
  • 打赏
  • 举报
回复
仅供参考
//求从Begin到End的正整数中挑出任意个数使其总和为Sum的所有方案
#include <stdio.h>
#include <conio.h>
int Begin,End,Sum;
int j;
int o[1000];
long n;
void combsum(int b,int e,int s,int d) {
    int i;

    if (e>s) e=s;
    for (i=e;i>=b;i--) {
        if ((i+b)*(i-b+1)/2<s) break;
        o[d]=i;
        if (s-i<=0) {
            n++;
            printf("%8ld:",n);
            for (j=0;j<=d;j++) printf("%d ",o[j]);
            printf("\n");
        } else {
            if (d+1<1000) combsum(b,i-1,s-i,d+1);
            else {
                printf("Error:Too deep.\n");
                return;
            }
        }
    }
}
void main() {
    clrscr();
    printf("Input Begin,End,Sum:");
    scanf("%d,%d,%d",&Begin,&End,&Sum);
    n=0L;
    combsum(Begin,End,Sum,0);
    printf("Total:%ld\n",n);
    getch();
}
fuhan3288 2013-03-07
  • 打赏
  • 举报
回复
能给出具体一点的算法吗
图灵狗 2013-03-07
  • 打赏
  • 举报
回复
上面的就是这个意思,一直递归一个数分解为两个更小的数,直到下限比如小于10啊之类的。
引用 2 楼 fuhan3288 的回复:
不是特别懂,那该怎么做循环呢? 老师给的思想是分配掉第一个以后剩余的还是一个分解问题
fuhan3288 2013-03-07
  • 打赏
  • 举报
回复
不是特别懂,那该怎么做循环呢? 老师给的思想是分配掉第一个以后剩余的还是一个分解问题
图灵狗 2013-03-07
  • 打赏
  • 举报
回复
1、n先分解为更小两数n1和n2的和; 2、n1和n2再分别分解为更小两数n11/n12和n21/n22的和; 3、依次递归,直到nxx/nyy到达下限。

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧