以前看面试宝典(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. spring init

    DN学院讲师招募     Markdown编辑器轻松写博文     TOP 50 CTO坐镇直招     读文章说感想获好礼 通过Spring @PostConstruct 和 @PreDestroy ...

  2. iTunes Documents 文件共享指导手册

    金田 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Helvetica; min-height: 13.0px } p.p2 { margi ...

  3. 【转】Django中的request与response对象

    关于request与response 前面几个 Sections 介绍了关于 Django 请求(Request)处理的流程分析,我们也了解到,Django 是围绕着 Request 与 Respon ...

  4. 纯HTML自动刷新页面或重定向

    refresh 属性值  --  刷新与跳转(重定向)页面 refresh出现在http-equiv属性中,使用content属性表示刷新或跳转的开始时间与跳转的网址 refresh示例一:5秒之后刷 ...

  5. 使用python landport库快速实现排行榜

    背景介绍 排行榜业务使用的频率实在太高了,各种活动都会使用排行榜.经过多次开发后我觉得实现一个简单的排行榜库,它能够完成当前我遇到的所有业务逻辑问题,也希望能够帮助到想要快速开发排行榜业务的同行. 我 ...

  6. spring boot gradle build:bootRepackage failed

    When running 'gradle clean build' on my spring boot project (version 1.3.6.RELEASE) on windows 10 (a ...

  7. 阿里安卓面试分析: Android应用的闪退(crash)问题跟踪和解析

    一:问题描述    闪退(Crash)是客户端程序在运行时遭遇无法处理的异常或错误时而退出应用程序的表现,请从crash发生的原因分类与解决方法.在出现crash后如何捕捉并分析异常这两个问题给出自己 ...

  8. 撸一个Android高性能日历控件,高仿魅族

    Android原生的CalendarView根本无法满足我们日常开发的需要,在开发吾记APP的过程中,我觉得需要来一款高性能且美观简洁的日历控件,觉得魅族的日历风格十分适合,于是打算撸一款. gith ...

  9. 使用 ipdb 调试 Python

    1.安装 pip install ipdb 2.使用 python -m ipdb xxx.py 程序内部: from ipdb import set_trace set_trace() 3.常用命令 ...

  10. javascript与jQuery选项卡效果

    HTML结构: <!doctype html><html><head><meta charset="utf-8"><title ...