打印星号(*)三角形(C# Linq实现)的小例子
以前看面试宝典(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实现)的小例子的更多相关文章
- 星号三角形 I python
'''星号三角形 I描述读入一个整数N,N是奇数,输出由星号字符组成的等边三角形,要求:第1行1个星号,第2行3个星号,第3行5个星号,依次类推,最后一行共N的星号.输入示例1:3输出示例2: * * ...
- python打印各种三角形
# 打印左下角三角形:for i in range(10):之后,range(0,i)# 打印右上角三角形:在左下角的基础上,将"-"变成" "空格 for i ...
- python脚本8_打印对顶三角形
#打印对顶三角形 a = int(input('>>>')) for i in range(-a,a+1): if i < 0: i = -i print(" &qu ...
- JAVA 基础编程练习题47 【程序 47 打印星号】
47 [程序 47 打印星号] 题目:读取 7 个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*. package cskaoyan; public class cskaoyan47 { ...
- Runtime的几个小例子(含Demo)
一.什么是runtime(也就是所谓的“运行时”,因为是在运行时实现的.) 1.runtime是一套底层的c语言API(包括很多强大实用的c语言类型,c语言函数); [runti ...
- c# BackGroundWorker 多线程操作的小例子
在我们的程序中,经常会有一些耗时较长的运算,为了保证用户体验,不引起界面不响应,我们一般会采用多线程操作,让耗时操作在后台完成,完成后再进行处理或给出提示,在运行中,也会时时去刷新界面上的进度条等显示 ...
- 一:AndEngine的小例子
首先导入架包,下载:http://download.csdn.net/detail/duancanmeng/4060082 lib文件夹中 像我们写android程序entends Activity一 ...
- c#几个小例子引发的思考
楚广明老师的c#教程每一节都会给出几个小例子让大家联系,对于初学者来说这确实是一件很纠结的事情,下面我把这几个小例子简单的写一下.同时看一下我们学到了什么 1.面向过程版的圆周长面积计算 using ...
- Java处理文件小例子--获取全国所有城市的坐标
需求:前端展示数据,全国城市的坐标
- 我的Android进阶之旅------>Android拍照小例子
今天简单的学习了一下android拍照的简单实现. 当然该程序是个小例子,非常简单,没有什么复杂的操作,但是可以学习到Android 拍照API流程. 1.在布局文件中添加一个 surfaceView ...
随机推荐
- 10条建议让你创建更好的jQuery插件
在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模式.这样我就可以 copy & paste 大部分的代码结构,只要专注最主要的逻辑代码就行了.使 ...
- SQLServer提取日期中的年月日及其他格式
提取年:datepart(yy,getdate())提取月:datepart(mm,getdate())提取日:datepart(dd,getdate())提取日期格式:Select CONVERT( ...
- Mac上关于shell使用Python3和C++11声明
1.使用Python3 Mac上的shell上自带的Python版本是2.7,当需要使用Python3时,下载安装好Python时,在shell上敲入Python发现却还是显示Python2.7,这是 ...
- 原生ajax详解
Ajxa局部刷新用于提高用户体验.Ajax技术的核心是XMLHttpRequest对象(简称XHR) XMLHttpRequest对象 XMLHttpRequest对象在ie7及更高版本可以这样申明. ...
- Apache Flume日志收集系统简介
Apache Flume是一个分布式.可靠.可用的系统,用于从大量不同的源有效地收集.聚合.移动大量日志数据进行集中式数据存储. Flume简介 Flume的核心是Agent,Agent中包含Sour ...
- 【js数据结构】栈解决括号不匹配问题
栈可以用来判断一个算术表达式中的括号是否匹配. 思路:读取算术表达式,遇到左括号'{'.'['.'('压入栈,栈的特点是后入先出,所以当遇到右括号'}'.']'.')'的时候,取出栈顶元素,是否满足读 ...
- 实例PK(Vue服务端渲染 VS Vue浏览器端渲染)
Vue 2.0 开始支持服务端渲染的功能,所以本文章也是基于vue 2.0以上版本.网上对于服务端渲染的资料还是比较少,最经典的莫过于Vue作者尤雨溪大神的 vue-hacker-news.本人在公司 ...
- Android解析xml文件-采用DOM,PULL,SAX三种方法解析
解析如下xml文件 <?xml version="1.0" encoding="UTF-8"?> <persons> <perso ...
- 深入PHP变量存储结构 标签: PHP存储
1.深入PHP变量存储结构 标签: PHP存储 分类: 编程语言(10) 首先声明,我并没有去读PHP的源码,只是对于PHP的有时候诡异的表现感兴趣,找了一下开发人员laruence的博客结合PH ...
- java学习常遇问题及解决方案
eclipse中的项目运行时不出现run as→java application选项? 解决方案☞必须有正确的主方法,即public static void main(String[]args){}