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

不拘一格編程序之一
循環打印算法
做者:朱雲翔
 
    小說中常常有人說某某將領打仗天馬行空,不拘一格,讓敵人防不勝防,好比《×××》中的李牧;好比《大唐雙龍傳》中的寇少。
    編程序時也要有怎樣的思想,不能被條條框框所束縛,好比這個例子:
    【例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等代碼就不耗費時間了嗎?答曰:一、memecpy的時間花費遠遠printf等屏幕顯示類函數底。二、就算是空循環體的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)。
 
    編寫軟件不拘一格,並非要你編什麼程序都劍走偏鋒,而是說當走普通的路不通的時候,或者很是難走時,別完了試試其它的路。就像以上算法,各自有其優缺點,都有其本身的適用範圍,切勿只用一種包打天下,也切勿爲了眩耀而使用不適用的算法。
 
相關文章:不拘一格編程序之一循環打印算法  
          不拘一格編程序之二俄羅斯方塊新增行算法
                  不拘一格遍程序之三 變量取值交換算法
                              不拘一格編程序之四 循環的各類形式
相關文章
相關標籤/搜索