网上搜到的整数划分问题不考虑排序,例如认为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);
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
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