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

C 語言經典演算法:1-2+3-4+...+99-100 交替加減求和三種實現

     編輯:關於C語言

題目回顧

計算數列 1 - 2 + 3 - 4 + 5 ... + 99 - 100 的總和。這是一個經典的迴圈與條件判斷練習,展示不同思路的程式碼風格與效能差異。

方法一:正負號翻轉法(最優雅、高效)

使用 tag 變數在 +1/-1 間切換,單一迴圈完成:

int sum = 0, tag = 1;
for (int i = 1; i <= 100; i++) {
    sum += i * tag;
    tag = -tag;  // 正負號翻轉
}
printf("%d\n", sum);  // 輸出 -50

優點: O(1) 空間、O(n) 時間、邏輯清晰、無分支預測失敗。

方法二:奇偶分離陣列法(教學示範用)

將奇數、偶數分別存入陣列再累加:

int odd[50], even[50];
int m = 0, n = 0;

// 填入奇數 1,3,5...99
for (int i = 1; i < 100; i += 2) odd[m++] = i;
// 填入負偶數 -2,-4...-100
for (int i = 2; i <= 100; i += 2) even[n++] = -i;

int sum = 0;
for (int k = 0; k < 50; k++) sum += odd[k] + even[k];
printf("sum=%d", sum);

缺點: 額外 O(n) 空間、程式碼冗長、易出界錯誤(原碼有 i1++ 兩次導致邏輯錯誤)。

方法三:數學公式法(O(1) 極致效能)

觀察規律:(1-2) + (3-4) + ... + (99-100) = (-1) × 50 = -50

int sum = -50; // 直接給出結果
// 或通用公式:n 為偶數時 sum = -n/2
int n = 100;
int sum = (n % 2 == 0) ? -n/2 : (n+1)/2;

效能與風格比較

方法時間複雜度空間複雜度可讀性推薦度
正負號翻轉O(n)O(1)⭐⭐⭐⭐⭐✅ 首選
奇偶陣列O(n)O(n)⭐⭐❌ 不推薦
數學公式O(1)O(1)⭐⭐⭐⭐✅ 面試加分

總結

解決交替加減求和,正負號翻轉法 是工程上最佳平衡;數學公式法 則展現演算法思維深度。避免為簡單問題引入不必要的陣列與複雜索引操作,保持程式碼簡潔、高效、可維護。

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