航电ACM [hdu 2015] 偶数求和

偶数求和

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();
        }
    }

}

 

 

 

 

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值