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

时间: 2024-07-28 23:19:35

打印星号(*)三角形(C# Linq实现)的小例子的相关文章

D3D triangle list(三角形列) 小例子

画三角形列的例子程序 #pragma once #pragma comment(lib,"d3d9.lib") #pragma comment(lib,"d3dx9.lib") #include<d3d9.h> #include<d3dx9.h> //TODO: -1 custom vertex struct CUSTOMVERTEX { float x; float y; float z; float rhw; }; #define D3D

D3D 两个三角形旋转 小例子

两个三角形围绕Y轴旋转. 程序 #pragma once #pragma comment(lib,"winmm.lib") #pragma comment(lib,"d3d9.lib") #pragma comment(lib,"d3dx9.lib") #include<d3d9.h> #include<d3dx9.h> struct CUSTOMVERTEX { FLOAT x,y,z; DWORD color; };

D3D 旋转三角形 小例子

一个旋转的三角形,主要练习坐标变换. #pragma once #pragma comment(lib,"winmm.lib") #pragma comment(lib,"d3d9.lib") #pragma comment(lib,"d3dx9.lib") #include <d3d9.h> #include <d3dx9.h> #include <strsafe.h> #pragma warning(dis

星号三角形 I python

'''星号三角形 I描述读入一个整数N,N是奇数,输出由星号字符组成的等边三角形,要求:第1行1个星号,第2行3个星号,第3行5个星号,依次类推,最后一行共N的星号.输入示例1:3输出示例2: * ***'''#<1># n = eval(input())n = int(input())for i in range(round((n+1)/2)): a = "*"*(2*(i+1)-1) print("{}".format(a).center(n,&qu

C语言访问webservice小例子

近期做的一个项目中,需要访问webservice获取一些json格式的数据.返回的页面内容只是json格式的数据,并不像实际页面那么复杂.所以不想再引入工具库,直接用socket简单实现了. 以下代码并不是实际项目源码,是我摘取出来整理成的一个小例子分享给大家.代码本身很容易理解,但是需要一些socket编程和http协议基础. #include <stdio.h> #include <sys/socket.h> #include <netinet/in.h> #inc

android:json解析的两个工具:Gson和Jackson的使用小例子

1.简介 json是android与服务器通信过程中常用的数据格式,例如,如下是一个json格式的字符串: {"address":"Nanjing","name":"NUPT","students":[{"name":"stu1","id":"10000","age":20},{"name"

lucene.net 3.0.3、结合盘古分词进行搜索的小例子(转)

lucene.net 3.0.3.结合盘古分词进行搜索的小例子(分页功能) 添加:2013-12-25 更新:2013-12-26 新增分页功能. 更新:2013-12-27 新增按分类查询功能,调整索引行新增记录的图片字段. //封装类 [csharp] view plaincopyprint? using System; using System.Collections.Generic; using System.Linq; using System.Web; using Lucene.Ne

一个简单的小例子让你明白c#中的委托-终于懂了!

模拟主持人发布一个问题,由多个嘉宾来回答这个问题. 分析:从需求中抽出Host (主持人) 类和Guests (嘉宾) 类. 作为问题的发布者,Host不知道问题如何解答.因此它只能发布这个事件,将事件委托给多个嘉宾去处理.因此在Host 类定义事件,在Guests类中定义事件的响应方法.通过多番委托的"+="将响应方法添加到事件列表中,最终 Host 类将触发这个事件.实现过程如下: 代码其实很少下面贴出来所有代码: QuestionArgs.cs view plaincopy to

Hadoop mapreduce 数据去重 数据排序小例子

数据去重: 数据去重,只是让出现的数据仅一次,所以在reduce阶段key作为输入,而对于values-in没有要求,即输入的key直接作为输出的key,并将value置空.具体步骤类似于wordcount: Tip:输入输出路径配置. import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop

Runtime的几个小例子(含Demo)

一.什么是runtime(也就是所谓的"运行时",因为是在运行时实现的.)           1.runtime是一套底层的c语言API(包括很多强大实用的c语言类型,c语言函数);  [runtime运行系统]           2.实际上,平时我们编写的oc代码,底层都是基于runtime实现的;                             [OC语言的动态性]  运行时系统 (runtime system),对于C语言,函数的调用在编译的时候会决定调用哪个函数.对