首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

循環列印演算法:不拘一格的程式設計思維(一)

     編輯:關於C語言

「不拘一格」不僅是軍事謀略,更是程式設計的核心思維。面對同一個問題——在螢幕列印 t 個星號(t ≤ 50),我們可以有截然不同的四種實作,各有優劣,適用場景不同。

題目:void fun(int t) 列印 t 個「*」

設計一:暴力展開(空間換時間)

void fun(int t) {
    if (t < 0 || t > 50) return;
    switch(t) {
        case 1: printf("*"); break;
        case 2: printf("**"); break;
        // ... 寫到 case 50
    }
}

優點:時間複雜度 O(1),極快。
缺點:程式碼極度膨脹,維護困難,屬於「劍走偏鋒」。

設計二:標準迴圈(教科書寫法)

void fun(int t) {
    if (t < 0 || t > 50) return;
    for (int i = 0; i < t; i++) printf("*");
}

優點:邏輯清晰、程式碼簡潔、通用性強。
缺點:時間複雜度 O(t),頻繁呼叫 printf 有輸出開銷。

設計三:預備緩衝區 + memcpy(靜態空間換時間)

void fun(int t) {
    if (t < 0 || t > 50) return;
    char *p = "**************************************************"; // 50個*
    char buf[51];
    memcpy(buf, p, t);
    buf[t] = 0;
    printf(buf);
}

優點:時間複雜度 O(1),單次 printf 呼叫。
缺點:佔用額外靜態記憶體(p 與 buf)。

設計四:動態分配 + memset(靈活空間換時間)

void fun(int t) {
    if (t < 0 || t > 50) return;
    char *p = (char*)malloc(t + 1);
    if (!p) return;
    memset(p, '*', t);
    p[t] = 0;
    printf(p);
    free(p);
}

優點:空間按需分配,無靜態浪費。
缺點:增加 malloc/free 與 memset 開銷,雖仍屬 O(1) 但常數因子較大。

核心啟示

「不拘一格,不是要你寫什麼程式都劍走偏鋒,而是當普通路徑走不通或極難走時,嘗試另闢蹊徑。各演算法各有優劣與適用域,切勿一招打天下,也切勿為炫技而濫用不適合的演算法。」

這正是工程師思維的精髓:理解權衡,按場景選擇最優解。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved