以前看面试宝典(C#)的时候,记得有一道题是打印三角形的。比如下图:

记得那时候刚学C#花了我好长时间才做出来,那是用的方法没有使用到linq,现在使用Linq重新做一次。以下是代码:

             int empty = ;
for (int i = ; i <= empty; i++)
{
foreach (var c in Enumerable.Repeat(" ", empty - i))
{
Console.Write(c);
}
foreach (var s in Enumerable.Repeat("* ", i))
{
Console.Write(s);
}
Console.WriteLine();
}
Console.WriteLine("Press enter to exit");
Console.ReadKey();

解题思路:

观察看出,三角行的左侧,可以看成一个三角形,如下图的红色三角形所示:

可以把红色三角形,看成是字符串“ ”空格组成的倒三角形。示意图:一个方块代表一个“ ”字符串。

代码也可以写成函数式编程的风格(书上称这种语法的是方法语法):

             int empty = ;                             //empty是*的个数
for (int i = ; i <= empty; i++)
{
Enumerable. //整体作用:输出空格三角型
Repeat(" ", empty - i).ToList(). //Repeat(TResult,int count)函数,控制每行的空格数。
ForEach(Console.Write); //ForEach(Action<T> action)函数,对每个元素都执行action函数,即每个元素都
//执行Console.Write函数 Enumerable.Repeat("* ", i).ToList().ForEach(Console.Write); //作用输出*号三角形 Console.WriteLine(); //控制换行
}

最近又看了看Linq编程,看到Repeat操作符就想起以前的程序,随手写了一个,加深印象。

重构代码:

提取参数empty和“*”和行数,使次函数不仅可以输出*三角形,还可以输出其他类型的三角形。比如+号三角形等。提取的函数为:

        //打印*三角形
private static void PrintTriangle(string typeChar,int count)
{
int empty = count;
for (int i = ; i <= empty; i++)
{
Enumerable.Repeat(" ", empty - i).ToList().ForEach(Console.Write);
Enumerable.Repeat(typeChar+" ", i).ToList().ForEach(Console.Write);
Console.WriteLine(); //控制换行
}
}

PrintTriangle("*",10);函数调用,输出与上图三角形相同。

PrintTriangle("+",10);PrintTriangle("0",5);输出下图所示:

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

  1. 星号三角形 I python

    '''星号三角形 I描述读入一个整数N,N是奇数,输出由星号字符组成的等边三角形,要求:第1行1个星号,第2行3个星号,第3行5个星号,依次类推,最后一行共N的星号.输入示例1:3输出示例2: * * ...

  2. python打印各种三角形

    # 打印左下角三角形:for i in range(10):之后,range(0,i)# 打印右上角三角形:在左下角的基础上,将"-"变成" "空格 for i ...

  3. python脚本8_打印对顶三角形

    #打印对顶三角形 a = int(input('>>>')) for i in range(-a,a+1): if i < 0: i = -i print(" &qu ...

  4. JAVA 基础编程练习题47 【程序 47 打印星号】

    47 [程序 47 打印星号] 题目:读取 7 个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*. package cskaoyan; public class cskaoyan47 { ...

  5. Runtime的几个小例子(含Demo)

    一.什么是runtime(也就是所谓的“运行时”,因为是在运行时实现的.)           1.runtime是一套底层的c语言API(包括很多强大实用的c语言类型,c语言函数);  [runti ...

  6. c# BackGroundWorker 多线程操作的小例子

    在我们的程序中,经常会有一些耗时较长的运算,为了保证用户体验,不引起界面不响应,我们一般会采用多线程操作,让耗时操作在后台完成,完成后再进行处理或给出提示,在运行中,也会时时去刷新界面上的进度条等显示 ...

  7. 一:AndEngine的小例子

    首先导入架包,下载:http://download.csdn.net/detail/duancanmeng/4060082 lib文件夹中 像我们写android程序entends Activity一 ...

  8. c#几个小例子引发的思考

    楚广明老师的c#教程每一节都会给出几个小例子让大家联系,对于初学者来说这确实是一件很纠结的事情,下面我把这几个小例子简单的写一下.同时看一下我们学到了什么 1.面向过程版的圆周长面积计算 using ...

  9. Java处理文件小例子--获取全国所有城市的坐标

    需求:前端展示数据,全国城市的坐标

  10. 我的Android进阶之旅------>Android拍照小例子

    今天简单的学习了一下android拍照的简单实现. 当然该程序是个小例子,非常简单,没有什么复杂的操作,但是可以学习到Android 拍照API流程. 1.在布局文件中添加一个 surfaceView ...

随机推荐

  1. H5微信播放全屏问题

    在ios和安卓手机里的微信下播放视频时,会遇到不少问题,例如需要手动点击,视频才会播放,并且视频会跳出微信框,出现控制条,如果视频不是腾讯视频,播放完毕会出现腾讯视频的广告推送等问题 解决办法:给vi ...

  2. HttpClient filter中间转发从A tomcat转发至B tomcat

    BackFilter.java 主要解决基于HttpGet/HttpPost以及基于HttpPost的附件流转发import java.io.IOException; import java.io.I ...

  3. Cookie和Session的原理图

    Cookie Session

  4. KoaHub平台基于Node.js开发的Koa 连接支付宝插件代码信息详情

    KoaHub平台基于Node.js开发的Koa 链接支付宝插件代码信息详情 easy-alipay alipay payment & notification APIs easy-alipay ...

  5. 2005: [Noi2010]能量采集

    2005: [Noi2010]能量采集 Time Limit: 10 Sec  Memory Limit: 552 MBSubmit: 1831  Solved: 1086[Submit][Statu ...

  6. SEO-站内优化规范

    类别 要求 实际工作要求 程 序 设 计 1.DIV+CSS布局 2.站内导航连接性良好 面包屑导航,翻页方式使用样式二,文章和产品上一页和下一页 3.图片的ALT属性 在编程时注意写 4.超级链接的 ...

  7. Spring Data JPA 简单查询--接口方法

    一.接口方法整理速查 下表针对于简单查询,即JpaRepository接口(继承了CrudRepository接口.PagingAndSortingRepository接口)中的可访问方法进行整理.( ...

  8. DapperPoco -- 基于Dapper的、轻量级的、高性能的、简单的、灵活的ORM框架

    为什么要重复造轮子 因为现有的轮子都在某些方面不太令我满意,下面我来一一点评一下,欢迎拍砖. Entity Framework 我喜欢傻瓜化使用方式的框架,同时又不失灵活性. EF虽然使用起来足够简单 ...

  9. mysql---数据控制语言(用户及其权限管理)

    用户管理 用户数据所在位置: mysql中的所有用户,都存储在系统数据库(mysql)中的user 表中--不管哪个数据库的用户,都存储在这里.

  10. 用Stax方式处理xml

    1.读取xml文件,首先用类加载器加载项目目录下的xml文件,从XMLInputFactory创建我所需要的XMLStreamReader,即得到了xml文件.根据XMLStreamConstant ...