1 / 10

練習題

練習題. (40%) 將「 3n+1 問題」範例,包裝成函式 自訂一個合法函式名稱 輸入為起始數字,例如 123 輸出為「末項 =1 」的數列,代表其經過的數字 例: threeNPlusOne(13) 要回傳: [13 40 20 10 5 16 8 4 2 1] 提示: 定義列: function out = threeNPlusOne(num) 一開始,先將 out 設為 num : out=num; 將原本印出的部分,改成向量合併: out = [out num];. 練習題. (60%) 黑洞數問題 ( 描述 )

Download Presentation

練習題

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 練習題 • (40%)將「3n+1問題」範例,包裝成函式 • 自訂一個合法函式名稱 • 輸入為起始數字,例如123 • 輸出為「末項=1」的數列,代表其經過的數字 • 例:threeNPlusOne(13)要回傳: • [13 40 20 10 5 16 8 4 2 1] • 提示: • 定義列:function out = threeNPlusOne(num) • 一開始,先將out設為num:out=num; • 將原本印出的部分,改成向量合併:out = [out num];

  2. 練習題 • (60%)黑洞數問題(描述) • 將一個「位數不完全相同」的四位數字,經過如下步驟運算,最後將變成「6174」 • 所有位數「由大排到小」減去「由小排到大」 • 合法:1234, 0912, 1999, • 非法:8888, 4444, ... • 範例: 3087→ 8730-0378→8352→ 8532-2358 →6174→ 7641-1467 → 6174→ ... • 本練習題只要求對四位數之計算做設計

  3. 練習題 • 黑洞數問題(規格) • 撰寫一函式計算黑洞數問題,函式名稱自訂 • 輸入:一合法四位數 • 輸出:一個向量,從輸入數字開始到黑洞數字為止 • 例如:blackHoleNum(3087)要回傳: • [3087 8352 6174]

  4. 練習題 • 黑洞數問題(提示) • 假設輸入數字的變數名稱為num • 把位數拆開 array = [getDigit(num,1) getDigit(num,2) getDigit(num,3) getDigit(num,4)] • 小排到大:xx = sort(array) • 大排到小:yy = fliplr(xx) • 如何將陣列(變數xx與yy)合併回數字? num1 = str2num( num2str(xx,'%d%d%d%d') ); % 小的數字 num2 = str2num( num2str(yy,'%d%d%d%d') ); % 大的數字 • num = num2 - num1; % 新的數字

  5. 練習題 • 黑洞數問題(提示) function out = blackHoleNum(num) out = num; while(1) % 步驟一:拆開num的每一個位數 % 步驟二:小排到大 & 大排到小 % 步驟三:將陣列合併回四位數字,並相減(num = num2-num1) % 步驟四:向量合併 out = [out num] % 步驟五:如果num等於6174則break end

  6. 練習題(加分題) • (3%)修改「九九乘法表」範例,使輸出如下 1*1= 1 2*1= 2 3*1= 3 4*1= 4 5*1= 5 6*1= 6 7*1= 7 8*1= 8 9*1= 9 1*2= 2 2*2= 4 3*2= 6 4*2= 8 5*2=10 6*2=12 7*2=14 8*2=16 9*2=18 1*3= 3 2*3= 6 3*3= 9 4*3=12 5*3=15 6*3=18 7*3=21 8*3=24 9*3=27 1*4= 4 2*4= 8 3*4=12 4*4=16 5*4=20 6*4=24 7*4=28 8*4=32 9*4=36 1*5= 5 2*5=10 3*5=15 4*5=20 5*5=25 6*5=30 7*5=35 8*5=40 9*5=45 1*6= 6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 7*6=42 8*6=48 9*6=54 1*7= 7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 8*7=56 9*7=63 1*8= 8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 9*8=72 1*9= 9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

  7. 練習題(加分題) • (3%, 各6%)分別使用兩層及一層迴圈,完成矩陣乘法 • 本練習題的目的,在於讓各位熟悉矩陣操作 • 使用「*」運算元,不需要自己寫迴圈 • 範例7當中,使用了三層迴圈

  8. 練習題(參考答案) • 3n+1問題 function out = threeNPlusOne(num) out = num; while(num~=1) if(0==rem(num,2)) num = num / 2; else num = num * 3 + 1; end out = [out num]; end

  9. 練習題(參考答案) • 黑洞數問題(自行搭配getDigit使用) function out = blackHoleNum(num) out = num; while(1) array = [getDigit(num,1) getDigit(num,2) getDigit(num,3) getDigit(num,4)]; xx = sort(array); yy = fliplr(xx); num1 = str2num( num2str(xx,'%d%d%d%d') );% 小的數字 num2 = str2num( num2str(yy,'%d%d%d%d') ); % 大的數字 num = num2 - num1; % 新的數字 out = [out num]; if(num==6174),break;end end

  10. 練習題(參考答案) • 九九乘法表修改輸出 for i=1:9 for j = 1:9 fprintf('%d*%d=%2d\t',j, i, i*j); end fprintf('\n'); end • 兩層/一層迴圈矩陣相乘 % 兩層 for i = 1:m for j = 1:n C(i,j) = A(i,:)*B(:,j); end end % 一層 for i = 1:n C(:,i) = A*B(:,i); end

More Related