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

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

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

function hua_fen
n=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;
end
end

function 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
    end
end

function 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;
end

for i=n:-1:1
    if m==1||i<=B(m-1)
        B(m)=i;A(len2,m)=i;
        shu_chu(n-i,m+1);
    end
end
end

function 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
    end
end


你可能感兴趣的:(matlab,整数划分,跳台阶,青蛙跳台阶)