打印星號(*)三角形(C# Linq實現)的小例子


  以前看面試寶典(C#)的時候,記得有一道題是打印三角形的。比如下圖:

 

記得那時候剛學C#花了我好長時間才做出來,那是用的方法沒有使用到linq,現在使用Linq重新做一次。以下是代碼:

 1             int empty = 10;
 2             for (int i = 1; i <= empty; i++)
 3             {
 4                 foreach (var c in Enumerable.Repeat(" ", empty - i))
 5                 {
 6                     Console.Write(c);
 7                 }
 8                 foreach (var s in Enumerable.Repeat("* ", i))
 9                 {
10                     Console.Write(s);
11                 }
12                 Console.WriteLine();
13             }
14             Console.WriteLine("Press enter to exit");
15             Console.ReadKey();

 

解題思路:

觀察看出,三角行的左側,可以看成一個三角形,如下圖的紅色三角形所示:

可以把紅色三角形,看成是字符串“ ”空格組成的倒三角形。示意圖:一個方塊代表一個“ ”字符串。

代碼也可以寫成函數式編程的風格(書上稱這種語法的是方法語法):

 1             int empty = 10;                             //empty是*的個數
 2             for (int i = 1; i <= empty; i++)
 3             {
 4                 Enumerable.                            //整體作用:輸出空格三角型
 5                     Repeat(" ", empty - i).ToList().   //Repeat(TResult,int count)函數,控制每行的空格數。
 6                     ForEach(Console.Write);            //ForEach(Action<T> action)函數,對每個元素都執行action函數,即每個元素都
 7                                                        //執行Console.Write函數
 8 
 9                 Enumerable.Repeat("* ", i).ToList().ForEach(Console.Write); //作用輸出*號三角形
10 
11                 Console.WriteLine();                   //控制換行
12             }

 最近又看了看Linq編程,看到Repeat操作符就想起以前的程序,隨手寫了一個,加深印象。

 

重構代碼:

提取參數empty和“*”和行數,使次函數不僅可以輸出*三角形,還可以輸出其他類型的三角形。比如+號三角形等。提取的函數為:

 1        //打印*三角形
 2         private static void PrintTriangle(string typeChar,int count)
 3         {
 4             int empty = count;
 5             for (int i = 1; i <= empty; i++)
 6             {
 7                 Enumerable.Repeat(" ", empty - i).ToList().ForEach(Console.Write);            
 8                 Enumerable.Repeat(typeChar+" ", i).ToList().ForEach(Console.Write); 
 9                 Console.WriteLine();    //控制換行
10             }
11         }

 

 PrintTriangle("*",10);函數調用,輸出與上圖三角形相同。

 PrintTriangle("+",10);PrintTriangle("0",5);輸出下圖所示:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM