給定一個長度為 n(n <= 100)的數列,該數列由從 2 開始的遞增偶數構成(即 2, 4, 6, 8...)。要求按照順序,每 m 個數字計算一個平均值;若最後一組不足 m 個,則按實際數量計算平均。程序需輸出這組平均值序列。
n 和 m。Sample Input
3 2
4 2
Sample Output
3 6
3 7
核心邏輯是模擬數列生成與分組累加。使用變數 base 追蹤當前偶數值,left 記錄剩餘未處理的數字個數。每次循環處理一組(m 個或剩餘個數),累加求和後計算平均值並輸出。
#include <stdio.h>
int main(void) {
int n, m, base, sum, left;
while (scanf("%d %d", &n, &m) == 2) {
base = 0;
left = n;
while (left > 0) {
sum = 0;
if (left >= m) {
for (int j = 1; j <= m; j++) {
base += 2;
sum += base;
}
left -= m;
if (left == 0)
printf("%d", sum / m);
else
printf("%d ", sum / m);
} else {
for (int j = 1; j <= left; j++) {
base += 2;
sum += base;
}
printf("%d", sum / left);
left = 0;
}
}
printf("\n");
}
return 0;
}
此解法時間複雜度為 O(n),完全滿足題目約束條件。