• 打印星号(*)三角形(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);输出下图所示:

  • 相关阅读:
    周五,远程连接及总体流程
    C++ 图片浏览
    深度解析Java内存的原型
    找不到class
    js读写cookie
    不利用临时变量,交换两个变量的值
    插入排序
    算法:一个排序(第一个最大,第二个最小,第三个其次大,第四其次小...)
    c#缓存介绍(1)
    JavaScript中创建自定义对象
  • 原文地址:https://www.cnblogs.com/zhangyuanbo12358/p/4108246.html
Copyright © 2020-2023  润新知