正整数拆分问题 将一个给定的正整数n拆分成若干个在a到b之间的正整数之和,有多少种拆法

[复制链接]
查看11 | 回复4 | 2011-5-14 09:21:41 | 显示全部楼层 |阅读模式
n=k1k2k3...km(a=ki=b)
求有多少种拆法。
a和b已知
改定n
有顺序或无顺序都可以
求程序解C或pascal都行
回复

使用道具 举报

千问 | 2011-5-14 09:21:41 | 显示全部楼层
#includeiostream.h
int
main()
{
        inta,b,c,k,i,j,t=0,sum,flag=0;
        cinabk;
        for(i=b;i=a;i--)
                for(j=a;j=b;j){
                        if(ij==k||i==k){
                                t;
                                break;
                        }
                        if(ijk)break;
                else{
                                sum=ij;
                                for(c=j;c=a;c--){
                                        if(sumc==k){
                                                flag=1;
                                                t;
                                        }
                                        if(sumck){
                                                if(flag==1){
                                                        sum=ij;
                                                        flag=0;
                                                }
                                                sum=c;
                                                c;
                                        }
                                }
                }
                }
        couttendl;
                return0;
}









<h4class=\"ask\">追问


可以输出每种拆分方法吗?
回复

使用道具 举报

千问 | 2011-5-14 09:21:41 | 显示全部楼层
//已经改了,可以输出每种拆分方法
#includeiostream.h
int
main()
{
        inta,b,c,k,i,j,t=0,sum,flag;
cinabk;
        for(i=b;i=a;i--)
                for(j=a;j=b=i;j){
                        if(ij==k||i==k){
                                t;
                                if(ij==k)printf(\"%d%d\\n\",i,j);
                                if(i==k)printf(\"%d\\n\",i);
                                break;
                        }
                        if(ijk)break;
                else{
                                sum=ij;
                                flag=0;
                        printf(\"%d%d\",i,j);
                                for(c=j;c=a;c--){
                                        if(sumc==k){
                                                flag=1;
                                                t;
                                                printf(\"%d\\n\",c);
                                        }
                                        if(sumck){
                                                if(flag==1){
                                                        sum=ij;
                                                        printf(\"\\n%d%d\",i,j);
                                                        flag=0;
                                                }
                                                printf(\"%d\",c);
                                                sum=c;
                                                c;
                                        }
                                }
                }
                }
cout\"总的输出方法为:\"tendl;
                return0;
}
回复

使用道具 举报

千问 | 2011-5-14 09:21:41 | 显示全部楼层
输出格式不是很理想,如果能将一次的分解结果用数组储存就更好了。
另外,能不能求出分解情况的排列数(即10=433,10=343,10=334视为不同方法)这种只需要知道总数就行了,不需要输出每种的方案。如果能做到,可以追加一些分数。
回复

使用道具 举报

千问 | 2011-5-14 09:21:41 | 显示全部楼层
不好意思能力不够我试了下做不出来
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行