程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 循環打印算法:不拘一格編程序之一

循環打印算法:不拘一格編程序之一

編輯:關於C語言

不拘一格編程序之一 循環打印算法 作者:朱雲翔       小說中經常有人說某某將領打仗天馬行空,不拘一格,讓敵人防不勝防,比如《尋秦記》中的李牧;比如《大唐雙龍傳》中的寇少。     編程序時也要有怎樣的思想,不能被條條框框所束縛,比如這個例子:     例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://zhuyunxiang.blog.51cto.com/653596/128441

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved