看板 MATLAB 關於我們 聯絡資訊
※ 引述《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
keepaway:OH WOW 我要先來讀一下 有問題再問你 :) 謝謝你 04/26 13:50
keepaway:不好意思 老師有希望我們按照給的例子那樣排列 也就是 04/26 13:52
keepaway:從最多零的組合到最後沒有零Y 04/26 13:52
keepaway:請問想法會差不多嗎? 04/26 13:53
keepaway:length 這種小東西應該可以用 :) 04/26 13:55
keepaway:原來function 裡面可以call 自己啊 學到了! 04/26 16:43