Re: [問題] 一題迴圈的練習

看板C_and_CPP作者 (最愛朴素妍)時間13年前 (2010/10/04 04:18), 編輯推噓7(701)
留言8則, 8人參與, 最新討論串3/4 (看更多)
※ 引述《chessjim (jim)》之銘言: : ( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) : ( 未必需要依照此格式,文章條理清楚即可 ) : 遇到的問題: (題意請描述清楚) : 我寫到一題迴圈的題目 : 如下 : 1 : 22 : 333 : 我已經寫出來了 : 卻不知道要怎麼從"無"到"有"一步一步分析它 : 希望得到的正確結果: : 希望有人可以教我如何從無到有寫出正確答案 仔細觀察他的規律 : ┌ 1 ←這是第 1 行, 印出 113行 22 ←這是第 2 行, 印出 22 └ 333 ←這是第 3 行, 印出 33 主要的動作如下: 1.從上到下重複印數行 2.每一行從左到右重複印數個數字 當有重複這個字眼出現, 表示可能需要迴圈來簡化程式碼, 而第 2點動作是第 1點動作的子動作, 所以他們是巢狀迴 (大動作包小動作) . 首先先產生大動作的迴圈, 大概長成這樣 : int lineCount = 3; // 總共要印的行數 int currentLine; // 目前印的行數 for( currentLine = 1; currentLine <= lineCount; ++currentLine ) { // 在這邊加上需要做的子動作程式碼 putchar('\n'); // 記得換行 } 小動作的迴圈可能長這樣 : int count; // 目前已經印出的數字個數 for( count = 1; count <= 目前的行數; ++count ) {  ̄ ̄ ̄ ̄ ̄ printf("%d", 目前的行數 ); }  ̄ ̄ ̄ ̄ ̄ 還記得剛剛講的巢狀迴圈嗎? 是時候把他們組合在一起了 int lineCount = 3; // 總共要印的行數 int currentLine; // 目前印的行數 for( currentLine = 1; currentLine <= lineCount; ++currentLine ) { // 在這邊加上需要做的子動作程式碼 int count; // 目前已經印出的數字個數 for( count = 1; count <= currentLine; ++count ) { printf("%d", currentLine ); } putchar('\n'); // 記得換行 } 然後就完工了, 這跟上面那篇有什麼不一樣? 因為還有另外 一種使用遞迴的思考方式, 不過主要也是大動作包小動作, 以印出 2行的情況來說 : 1.共有 2 行要印, 這是第 1 行 └共有 1 個 1 要印, 這是第 1 個 └共有 1 個 1 要印, 這是第 2 個 ←不用印 2.共有 2 行要印, 這是第 2 行 └共有 2 個 2 要印, 這是第 1 個 └共有 2 個 2 要印, 這是第 2 個 └共有 2 個 2 要印, 這是第 3 個 ←不用印 3.共有 2 行要印, 這是第 3 行 ←不用印 「共有 n 行要印」這句話可以寫成函式 : void linesToPrint( int n ) // 共 n 行要印 { if( n == 0 ) return; // n 為 0, 不用印 linesToPrint( n - 1 ); // 先印出前面 n - 1 行 // 在這邊加上印出數字的程式碼 putchar('\n');// 此行換行 } 「共有 n 個 d 要印」可以寫成函式 : void digitsToPrint( int n, int d ) // 共有 n 個 d 要印 { if( n == 0 ) return; // n 為 0, 不用印 digitsToPrint( n - 1, d );// 此行前面先印 n - 1 個 d printf( "%d", d ); // 印出第 n 個 d } 需要注意的是呼叫順序是由樹狀圖最底下往上層呼叫, 不過 完成順序則是由上而下, 有興趣的話就試試把它們組起來執 行吧! 其實有時候換成遞迴的方式思考也可以加深你對題目 的了解度, 謝謝觀賞. -- ◢████ ◢█ ◢██◣ ◢█ ◢███ ◢█ T-ara版怎麼去 ████◢█████s ~> T-ara ███ █ ◢█歡迎您的光臨 ███████████恩靜智妍孝敏 ███ ██ 素妍居麗寶藍 ████◥██◤ █████ψmakigoto123 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.197.115

10/04 04:22, , 1F
love大又進化了...
10/04 04:22, 1F
※ 編輯: loveme00835 來自: 140.121.197.115 (10/04 04:23)

10/04 04:23, , 2F
= =來去睡覺...
10/04 04:23, 2F

10/04 04:30, , 3F
這樣的文還真的是佛到不行了...XDD
10/04 04:30, 3F

10/04 06:45, , 4F
love大 必推
10/04 06:45, 4F

10/04 06:52, , 5F
受我一拜Orz!!感謝
10/04 06:52, 5F

10/04 09:42, , 6F
挖靠還上色..... 好人
10/04 09:42, 6F

10/04 11:17, , 7F
本版好人 不推不行 XD
10/04 11:17, 7F

10/04 12:37, , 8F
推love大! 超佛心的
10/04 12:37, 8F
文章代碼(AID): #1CgEJw6W (C_and_CPP)
文章代碼(AID): #1CgEJw6W (C_and_CPP)