序列定義為從 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) 計算每組平均!
#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] 平均 6n=4, m=2:序列 [2,4,6,8] → 分組 [2,4] 平均 3,[6,8] 平均 7(首+尾)/2 保證整數結果(等差數列項數為偶數或首尾同奇偶)L + R + 2,無浮點、無陣列、無循環求和