偶数求和
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 43196 Accepted Submission(s): 18867
Problem Description
有一个长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数,现在要求你按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值。编程输出该平均值序列。
Input
输入数据有多组,每组占一行,包含两个正整数n和m,n和m的含义如上所述。
Output
对于每组输入数据,输出一个平均值序列,每组输出占一行。
Sample Input
3 2
4 2
Sample Output
3 6
3 7
分析
数列:2,4,6,8,10,12,14,16,18,20,22,24 …… 2n
每 m 个数求出一个平均值,即求这 m 个数中的“第一个数和最后一个数的平均值”
假设 q = n /m ; r = n % m ;(q = 1,2,3,4 …… ; r = 0,1,2,3 …… ;即数列可分成 q 组余 r 个数) 则:
m 个数一组的时候:
第一个数:2 * [ ( q -1) * m + 1 ] 最后一个数:2 * q * m 平均值:2 * q * m - m + 1
最后不足 m 个数的时候:
第一个数:2 * [ ( q -1) * m + 1 ] 最后一个数:2 * [ ( q -1) * m + r ] 平均值:2 * q * m - 2 * m + r + 1
算法代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int n = scanner.nextInt();
int m = scanner.nextInt();
int q = n / m;
int r = n % m;
int i = 1;
for (; i <= q; i++) {
System.out.print(2 * i * m - m + 1);
if (i != q) System.out.print(" ");
}
if (r != 0) System.out.print(" " + (2 * (i) * m - 2 * m + r + 1));
System.out.println();
}
}
}