2013-11-22 39 views
1

我一直試圖在空閒時間使用「科迪」挑戰問題來教自己的Matlab,但我一直堅持這個爲期兩週。有人可以幫我寫一個matlab程序從0到N^M的基數N嗎?

說明:

返回數字數組從0其中(有效地)計數到N^M-1在鹼N.結果應該在基質被返回,與代表一個數的每一列。每個元素代表數字的一個數字。索引較低的行表示較低的重要數字。

實施例1(二元):countInBaseN(2,2)(從0計數到3中基體2)

ANS =

0  0  1  1 
0  1  0  1 

實施例2(三元):countInBaseN(2,3- )(從0計數到8中底座3)

ANS =

0  0  0  1  1  1  2  2  2 
0  1  2  0  1  2  0  1  2 

這是我嘗試的代碼,但我不能得到我工作。有沒有人看到我在做什麼錯了?

function y = countInBaseN(M,N) 
for i=0:N.^M 
x = dec2base(i, N) 
x=num2str(x+1) - '0' 
ans=[ans x’] 
end 

謝謝。

+0

感謝您發佈有問題的代碼,但我們還需要知道究竟「不工作」的含義。 – chrylis

回答

1
double(dec2base(1:N^M,N)-'0') 

你的錯誤是使用num2str,這看待整個輸出爲十進制數。相反,它需要基於單個字符,這基本上是double

1

操作這可能不是你想怎麼辦呢......但它可以在一個單一的線,沒有循環,來完成這樣的字符串:

floor(mod(bsxfun(@rdivide, 0:N^M-1, N.^(M-1:-1:0).'),N)) 
+0

這很聰明。我幾乎不明白它是如何工作的。 – user3020151

+0

@ user3020151我建議你觀察部分結果:'bsxfun(...)',然後是'mod(...)'等。如果有什麼東西你看不清楚,請隨時問我 –

相關問題