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

C語言數列處理:偶數分組求平均值輸出

     編輯:關於C語言

問題理解

輸入 n, m。考慮前 n 個正偶數:2, 4, 6, ..., 2n。將它們每 m 個分為一組,計算每組平均值並輸出。最後一組不足 m 個也要輸出其平均值。多組測試至 EOF。

數學推導優化

第 k 組(0-based)包含偶數:

2(km+1), 2(km+2), ..., 2(km+m)(最後一組可能較少)。

等差數列平均值 = (首項+末項)/2 = 2(km+1) + 2(min(km+m, n)) / 2 = 2km + m + 1(滿組情況)。

可直接 O(n/m) 計算,無需逐個累加。

原始代碼邏輯分析

原代碼逐個累加偶數,每 m 個輸出平均並重置。邏輯正確但效率較低,且變量命名 k, flag, sum 不夠清晰。

優化版實現

#include <stdio.h>

int main() {
    int n, m;
    while (scanf("%d %d", &n, &m) == 2) {
        int groups = (n + m - 1) / m; // 向上取整組數
        for (int g = 0; g < groups; g++) {
            int start = g * m + 1;           // 組內首項索引 (1-based)
            int end = (g == groups-1) ? n : (g+1)*m; // 末項索引
            // 平均值 = (首偶數 + 末偶數) / 2 = (2*start + 2*end) / 2 = start + end
            int avg = start + end;
            printf("%d%c", avg, (g == groups-1) ? '\n' : ' ');
        }
    }
    return 0;
}

關鍵優化點

  • O(1) 組平均值計算:利用等差數列性質,避免內層迴圈。
  • 邊界處理統一:最後一組用條件運算符確定 end。
  • 輸出格式控制:組間空格,末尾換行,無多餘空格。

測試驗證

Input: 5 2
偶數: 2 4 6 8 10
分組: (2,4) avg=3; (6,8) avg=7; (10) avg=10
Output: 3 7 10

擴展:任意等差數列分組平均

若數列為 a, a+d, a+2d, ...,第 g 組平均值 = a + d*(start+end-2)/2。同樣 O(1) 計算。

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