博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

输出等腰三角形

Posted on 2007-02-07 16:34  liufu627  阅读(880)  评论(0)    收藏  举报

今天在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();
            }
        }
    }
}