作者loveme00835 (最愛朴素妍)
看板C_and_CPP
標題Re: [問題] 一題迴圈的練習
時間Mon Oct 4 04:17:57 2010
※ 引述《chessjim (jim)》之銘言:
: ( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 )
: ( 未必需要依照此格式,文章條理清楚即可 )
: 遇到的問題: (題意請描述清楚)
: 我寫到一題迴圈的題目
: 如下
: 1
: 22
: 333
: 我已經寫出來了
: 卻不知道要怎麼從"無"到"有"一步一步分析它
: 希望得到的正確結果:
: 希望有人可以教我如何從無到有寫出正確答案
仔細觀察他的規律 :
┌ 1 ←這是第
1 行, 印出
1 個
1
共
3行 22 ←這是第
2 行, 印出
2 個
2
└ 333 ←這是第
3 行, 印出
3 個
3
主要的動作如下:
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
推 hilorrk:love大又進化了... 10/04 04:22
※ 編輯: loveme00835 來自: 140.121.197.115 (10/04 04:23)
→ loveme00835:= =來去睡覺... 10/04 04:23
推 james732:這樣的文還真的是佛到不行了...XDD 10/04 04:30
推 tkhunter:love大 必推 10/04 06:45
推 chessjim:受我一拜Orz!!感謝 10/04 06:52
推 silveriii:挖靠還上色..... 好人 10/04 09:42
推 nowar100:本版好人 不推不行 XD 10/04 11:17
推 xatier:推love大! 超佛心的 10/04 12:37