Re: [問題] 列出所有組合的問題

看板MATLAB作者 (流刑人形)時間12年前 (2013/04/26 13:41), 編輯推噓2(204)
留言6則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《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
OH WOW 我要先來讀一下 有問題再問你 :) 謝謝你
04/26 13:50, 1F

04/26 13:52, , 2F
不好意思 老師有希望我們按照給的例子那樣排列 也就是
04/26 13:52, 2F

04/26 13:52, , 3F
從最多零的組合到最後沒有零Y
04/26 13:52, 3F

04/26 13:53, , 4F
請問想法會差不多嗎?
04/26 13:53, 4F

04/26 13:55, , 5F
length 這種小東西應該可以用 :)
04/26 13:55, 5F

04/26 16:43, , 6F
原來function 裡面可以call 自己啊 學到了!
04/26 16:43, 6F
文章代碼(AID): #1HUXEVgO (MATLAB)
文章代碼(AID): #1HUXEVgO (MATLAB)