Re: [問題] 列出所有組合的問題
※ 引述《keepaway (走開)》之銘言:
: 老師給了一個正整數array [f_1 ,..., f_n]
: 要我們找出所有可能的組合 array [r_1,....,r_n]
: r_i 要小於等於 f_i , i=1,...,n
: 並且不能用matlab 內建的command
: 整體上只能使用 for if while
: 這邊給個例子
: f=[1 2 3]
: 所有的r=[0 0 0] [0 1 1] [1 0 2] [1 2 1]
: [0 0 1] [0 1 2] [1 0 3] [1 2 2]
: [0 0 2] [0 1 3] [1 1 0] [1 2 3]
: [0 0 3] [0 2 1] [1 2 0]
: [0 1 0] [0 2 2] [1 1 1]
: [0 2 0] [0 2 3] [1 1 2]
: [1 0 0] [1 0 1] [1 1 3]
: 我想了滿久還是沒有想出一個有系統的方法
: 不知道有沒有人可以給我一點建議或是提示
function r=dis(f)
r=zeros(prod(f+1),length(f));
for k=2:prod(f+1)
r(k,:)=rplus(f,r(k-1,:),length(f));
end
end
function rnew=rplus(f,rold,ii)
rnew=rold;
if(rold(ii)==f(ii))
rnew(ii)=0;
rnew=rplus(f,rnew,ii-1);
else
rnew(ii)=rnew(ii)+1;
end
end
如果不能用prod或length其實寫個小迴圈也可,因為懶我還是用了…
zeros是用來宣告變數用的,應該不會不能用才對
其實下面的子函數就是一個用遞迴方法的簡易計數器,在指定的位數加一
先判斷需不需要進位,不需要就直接加,不然就該位歸零自我呼叫在下一位加一
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 129.2.129.163
推
04/26 13:50, , 1F
04/26 13:50, 1F
→
04/26 13:52, , 2F
04/26 13:52, 2F
→
04/26 13:52, , 3F
04/26 13:52, 3F
→
04/26 13:53, , 4F
04/26 13:53, 4F
→
04/26 13:55, , 5F
04/26 13:55, 5F
推
04/26 16:43, , 6F
04/26 16:43, 6F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):