老弟上大學了,回家考我這個,重點是要兩個迴圈解決,還真是差點燒了我這個除了 Google 什麼都不會的猴子腦筋。
這是結論,重點是絕對值跟想出後面的(i*2+1)的組合
static void Main() { int input = int.Parse(Console.ReadLine()); for (int i = 0; i < input; i++) { for (int j = 0; j < input - Math.Abs(input - (i * 2 + 1)); j++) { Console.Write("*"); } Console.WriteLine(); } Console.ReadLine(); }
我比較想講的是思考的技巧,首先
for (int i = 0; i < input; i++)外迴圈決定的是行數,首圖我輸入 input = 10 所以有輸出星號的行數就是 10 行
再來,內迴圈的重點是
如果你中間也是 j < input,那就會變成 10 * 10
所以印金字塔的重點就是,怎麼讓每一行要印的次數遞增或遞減,線索就是外迴圈 i 是回隨著每印一行增加的,所以可以用來調整第二行。 比方我需要遞減,那就是 j < 的數越來越小,所以
for (int j = 0; j < input - i; j++)
反之遞增的話就是 j < 的數要越來越大
想不出來?
我們再把線索縮小
for (int j = 0; j < ?; j++)先想出在這裡我們需要的 ? 的組合是什麼,以遞增來說就會是1、2、3...
而我們的素材有 i 跟 input,哪個比較容易達成這個條件呢?
for (int j = 0; j < i + 1; j++)
最後來重作一下大學的回家作業吧~
- 的組合是 4、3、2、1
ABC的組合是 1、3、5、7、9
題目重點在
一、- 號只有四行有
實際上迴圈還是走五次,但最後一次不印任何東西,又 input - i 會是從 5 開始,所以只要多減一就達成條件了
二、要怎麼把 i 的 0、1、2、3、4 變成 1、3、5、7、9 呢?
列出來就很容易發現,公式就是 i + i + 1(或 i * 2 + 1),所以
string[] charAry = { "A", "B", "C", "D", "E" }; int input = 5; for (int i = 0; i < input; i++) { for (int j = 0; j < input - i - 1; j++) { Console.Write("-"); } for (int j = 0; j < i * 2 + 1; j++) { Console.Write(charAry[i]); } Console.WriteLine(); } Console.ReadLine();
沒有留言:
張貼留言