24小时热门版块排行榜    

CyRhmU.jpeg
查看: 508  |  回复: 2

L-Tiger

新虫 (初入文坛)

[求助] matlab编程,几个正整数的和为定值,且后一个不小于前一个,求所有组合已有1人参与

几个正整数的和为定值,且后一个不小于前一个,求所有的组合。例如,x1+x2+x3=10,x1<=x2<=x3,求所有的可能组合,用matlab编写程序。感谢!

发自小木虫Android客户端
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wurongjun

专家顾问 (职业作家)

【答案】应助回帖

感谢参与,应助指数 +1
function zsfc
k=0;
for x1=1:10
    for x2=x1:10
        x3=10-x1-x2;
        if x3>x2 | x3==x2
        k=k+1;A(k,=[x1 x2 x3];
        end
    end
end
A
运行结果:
>>
A =

     1     1     8
     1     2     7
     1     3     6
     1     4     5
     2     2     6
     2     3     5
     2     4     4
     3     3     4
善恶到头终有报,人间正道是沧桑.
2楼2017-06-26 07:45:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

妙语录花

木虫 (小有名气)

%先做一个代换使得:
%x_(1)=y_(1)
%x_(2)=y_(1)+y_(2)
%x_(3)=y_(1)+y_(2)+y_(3)
%...
%x_(k)=y_(1)+y_(2)+...+y_(k)
%其中y_(1)>=1; y_(i)>=0   (2<=i<=k)
%最终有k*y_(1)+(k-1)*y_(2)+...+y_(k)=m

%对于维度较小的 不妨直接循环
p=1;
for i=1:fix(10/3)
    for j=0:fix((10-3*i)/(3-1))
        for l=0:fix((10-3*i-(3-1)*j)/(3-2))
      
            if  3*i+(3-1)*j+l*(3-2)==10   
            x{p}=cumsum([i,j,l]);
            p=p+1;
            end
      
        end
    end
end
找寻一种没有凭借的快乐。
3楼2017-06-26 08:30:58
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 L-Tiger 的主题更新
信息提示
请填处理意见