不拘一格编程序——循环打印算法

不拘一格编程序之一
循环打印算法
 
   小说中经常有人说某某将领打仗天马行空,不拘一格,让敌人防不胜防,比如《寻秦记》中的李牧;比如《大唐双龙传》中的寇少。
    编程序时也要有怎样的思想,不能被条条框框所束缚,比如这个例子:
    【例1】编写一个函数void fun(int t),要求在屏幕上打印t个“*”号,其中t的长度不会大于50。

【设计1】:
void fun(int t)
{
        if (t<0 || t>50)return;
        switch(t)
        {
                case 1: printf("*");break;
                case 2: printf("**");break;
                此处删除500字
                case n: printf("*****......**");break;
        }
}
以上方法虽然笨拙,但是时间复杂度为O(1),快!这是牺牲空间换取时间。
当然,编写设计一的人员一般不多,绝大多数人使用设计2。
 
【设计2】:
void fun(int t)
{
        int i;    
        if (t<0 || t>50)return;
        for(i=0;i<t;i++) printf("*");        
}
以上算法是最正宗的算法!优点是:程序相当简单,思路相当清晰。缺点是时间复杂度为O(t)。
 
设计3】:
void fun(int t)
{
        char     *p="****************************************************************************************";
        char buf[51];
        if (t<0 || t>50)return;
        memcpy(buf, p, t);
        buf[t]=0;
        printf(buf);        
}
乍一看,真麻烦,但是时间复杂度O(1)。有人说,那前面的memcpy等代码就不耗费时间了吗?答曰:1、memecpy的时间花费远远printf等屏幕显示类函数底。2、就算是空循环体的for循环再编译后也会产生若干行代表,比memcpy要慢。
但是这里增加了p和buf的存储空间。
 
【设计4】
 
void fun(int t)    
{    
                char    *p;    
                if (t<0 || t>50)return;    
                if (!(p = (char *)malloc(t+1)))return;
                memset(p, '*', t);
                p[t]=0;    
                printf(p);    
                free(p);
                return;                
}
与设计3类似,但与其相比,减少了多余的空间浪费,但是去增加了malloc内存分配操作和memset内存设置操作,相对增加了时间耗费。时间复杂度O(1)。
 
    编写软件不拘一格,并不是要你编什么程序都剑走偏锋,而是说当走普通的路不通的时候,或者非常难走时,别完了试试其它的路。就像以上算法,各自有其优缺点,都有其自己的适用范围,切勿只用一种包打天下,也切勿为了眩耀而使用不适用的算法。
 
相关文章:不拘一格编程序之一循环打印算法  
          不拘一格编程序之二俄罗斯方块新增行算法
                  不拘一格遍程序之三变量取值交换算法

                              不拘一格编程序之四循环的各种形式

 

《计算机达人成长之路——憧憬与迷茫篇》终于上市了,现在已经在网上预售,预售地址为:

当当网:http://product.dangdang.com/product.aspx?product_id=22457857

卓越网:http://www.amazon.cn/%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%BE%BE%E4%BA%BA%E6%88%90%E9%95%BF%E4%B9%8B%E8%B7%AF-%E6%9C%B1%E4%BA%91%E7%BF%94/dp/B005DIQMGU/ref=sr_1_1?ie=UTF8&qid=1311338256&sr=8-1

互动出版:http://product.china-pub.com/198427&chinapub=eqf&website_id=55880&eu_id=53013396_s6729905

各位《计算机达人成长之路》的粉丝们,感谢大家的支持,现在新书终于出版了,请大家:有钱的捧个预订,有人的到豆瓣网上做一个5星评价!

豆瓣地址为:

http://book.douban.com/subject/6729905/

我在豆瓣的主页为:

http://www.douban.com/people/zyxhp/

希望大家一如既往的支持!
展开阅读全文
©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值