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

HDU 2036 偶數求和:定長分組平均值計算

     編輯:關於C語言

題目大意

序列定義為從 2 開始的遞增偶數:2, 4, 6, ..., 2n(長度 n ≤ 100)。將序列按順序每 m 個數分為一組,求每組平均值;最後一組不足 m 個則按實際個數平均。多組測試數據,每行輸入 n m。

數學推導優化

第 k 組(0-based)包含索引 [k*m, min((k+1)*m, n)) 的元素。偶數序列第 i 項(0-based)為 2*(i+1)。
組內元素為等差數列,平均值 = 首項 + 末項 / 2。

  • 首項索引 L = k*m → 值 2*(L+1)
  • 末項索引 R = min((k+1)*m, n) - 1 → 值 2*(R+1)
  • 平均值 = (2*(L+1) + 2*(R+1)) / 2 = L + R + 2

無需陣列,O(1) 計算每組平均!

C 語言實現

#include <stdio.h>

int main() {
    int n, m;
    while (scanf("%d %d", &n, &m) != EOF) {
        int groups = (n + m - 1) / m;  // 向上取整組數
        for (int k = 0; k < groups; k++) {
            int L = k * m;
            int R = (k + 1) * m - 1;
            if (R >= n) R = n - 1;
            int avg = L + R + 2;  // 推導公式
            printf("%d%c", avg, k == groups-1 ? '\n' : ' ');
        }
    }
    return 0;
}

範例驗證

輸入:
3 2
4 2

輸出:
3 6
3 7

解析:

  • n=3, m=2:序列 [2,4,6] → 分組 [2,4] 平均 3,[6] 平均 6
  • n=4, m=2:序列 [2,4,6,8] → 分組 [2,4] 平均 3,[6,8] 平均 7

避坑指南

  • ❌ 實際生成陣列再求和 → 碼長、易越界
  • ❌ 整數除法截斷 → 平均值公式用 (首+尾)/2 保證整數結果(等差數列項數為偶數或首尾同奇偶)
  • ✅ 直接推導公式 L + R + 2,無浮點、無陣列、無循環求和
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved