有序的整数划分,青蛙跳台阶问题 MATLAB

来源:互联网 发布:手机sdr软件 编辑:程序博客网 时间:2024/06/05 15:02

网上搜到的整数划分问题不考虑排序,例如认为3 1 与1 3是一样的。

考虑排序的整数划分问题为跳台阶问题,但网上搜到的跳台阶问题没有输出排列结果,自己编写的matlab程序如下:

function hua_fenn=input('请输入一个数:\n');global A B;num=count(n,n);A=zeros(num,n);B=zeros(n,1);m=1;global len1 len2;len1=1;len2=1;shu_chu(n,m);C=zeros(2^(n-1),n);% 划分结果在矩阵C里面mark=1;for k=1:num    temp=pai_lie(nonzeros(A(k,:))');    [lgh,wth]=size(temp);    C(mark:mark+lgh-1,1:wth)=temp;    mark=mark+lgh;endendfunction num=count(n,m)    if n==1||m==1        num=1;    else        if n<m            num=count(n,n);        end        if n==m            num=1+count(n,m-1);        end        if n>m            num=count(n,m-1)+count(n-m,m);        end    endendfunction shu_chu(n,m)global len1 len2 A B;if n==0    fprintf('%d',B(1))    A(len2,1)=B(1);    for i=2:1:m-1        fprintf('+');        fprintf('%d',B(i));    end    if m>len1        fprintf('\n');        len1=len1+1;        len2=len2+1;    else        fprintf(', ');        len2=len2+1;    end    return;endfor i=n:-1:1    if m==1||i<=B(m-1)        B(m)=i;A(len2,m)=i;        shu_chu(n-i,m+1);    endendendfunction B=pai_lie(A)    d=length(A);    B(1,:)=A';    index=2;    for i=1:d-1        for j=i+1:d            if A(j)~=A(i)                B(index,:)=[A(1:i-1),A(j),A(i+1:j-1),A(i),A(j+1:d)];                index=index+1;            end        end    endend


0 0
原创粉丝点击