給定長度 n (n≤100) 的遞增偶數數列:2, 4, 6, ..., 2n。要求每 m 個數計算一次平均值,不足 m 個則以實際個數計算平均。輸出所有平均值序列,每組測資佔一行。
輸入: 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。
n, m 直到 EOF。r = n / m 與剩餘個數 l = n % m。m 個輸出平均;最後剩餘 l 個另行計算平均。#include <stdio.h>
int main() {
int n, m;
while (scanf("%d %d", &n, &m) != EOF) {
int total_groups = n / m;
int remainder = n % m;
int current = 2; // 起始偶數
long sum = 0;
int count = 0;
int first_output = 1;
// 處理完整群組
for (int g = 0; g < total_groups; ++g) {
sum = 0;
for (int i = 0; i < m; ++i) {
sum += current;
current += 2;
}
if (!first_output) printf(" ");
printf("%ld", sum / m);
first_output = 0;
}
// 處理剩餘元素
if (remainder > 0) {
sum = 0;
for (int i = 0; i < remainder; ++i) {
sum += current;
current += 2;
}
if (!first_output) printf(" ");
printf("%ld", sum / remainder);
}
printf("\\n");
}
return 0;
}
O(n),每個偶數僅被訪問一次。O(1),僅使用常數額外變數。while(scanf(...)!=EOF) 迴圈處理。