今天在CSDN上看到有人去面试,考了两道题,其中一道是输出等腰三角形,搞了半天都没搞定,后来被一个扫地的五分钟就搞定了,那人谔然!
刚好现在有点空闲,就拿这道题目来练手。因为做项目对于算法的运用很少,都是用别人现成的,所以算法也就荒废了。花了一番周折,幸好还是搞定了,不过没计时,不知道有没有超过五分钟,呵呵。
其实做算法题,无非是找规律,只要规律找到了,很快就可以解决问题,所以平时要多做一些算法题,培养一下思维,免得面试时露馅。
现在找来找一下规律:
要输出等腰三角形,第一行肯定是一个星号,第二行是三个星号,第三行是五个星号。。。从这里可以看出:第N行的星号数=2*N-1
星号算出来了,那么怎样计算每一行星号的前置字符了?画个图马上就得出答案来了。
首先,我要知道是输出多少行?假如是N行,那么最后一行输出的星号数为MAX,那么第I行的前置字符量就是MAX/2+1-I
这样,很快就可以编写出程序了。
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
Out3(30);
}
static void Out3(int iStep)
{
int iMax = 2 * iStep - 1;//最多的星号
string sPrefix = " ";//前面的后格
string sOther = "1";
string sStar = "*";
for (int i = 1; i <= iStep; i++)
{
Console.Write( sPrefix );
for (int j = 0; j < iMax / 2 + 1 - i ; j++)
Console.Write(sOther);
int count = 2*i - 1;
for (int j = 0; j < count; j++)
Console.Write(sStar);
Console.WriteLine();
}
}
}
}
浙公网安备 33010602011771号