程序员

Hackrank 统计十日通(第一天) 加权平均

2017-03-29  本文已影响0人  cfcodefans

译自 Day 0: Weighted Mean

加权平均 weighted mean
给一组数值的集合,和一组对应的权重值的集合,则加权平均的计算如下:

加权平均计算公式
其中xi是元素的值而wi是元素对应的权重.

元素值乘以对应权重的乘积之和除以权重之和.
例如,集合x={1,3,5}和对应的权重w={2,4,6}, 那么加权平均应该是:

如果我们把这个舍入到标量1,答案就是3.7


问题:

给一个有N个整数的数组X, 和一个数组W表示对应X中元素的权重, 计算并打印出x元素的加权平均. 你的答案应该精确到小数点后一位(例如,12.3)

输入: 第一行是一个整数N,表示数组X和W的长度.
第二行是以空格分隔的N个数字,即X数组的元素.
地三行是以空格分隔的N个数字,即W数组的元素.

约束:

输出:

打印出加权平均,精确到小数点后一位

例如

5
10 40 30 50 20
1 2 3 4 5

结果

32.0

怎么算:


scala

object Solution {
    def main(args: Array[String]) {
        import java.util.Scanner
        val scan: Scanner = new Scanner(System.in)
        try {
            val n: Int = scan.nextInt
            scan.nextLine()
            val X: Array[Int] = scan.nextLine().split(" ").map(_.toInt).toArray
            val W: Array[Int] = scan.nextLine().split(" ").map(_.toInt).toArray
            println("%.1f".format(X.zipAll(W, 0, 0).map((x_w)=> x_w._1 * x_w._2).sum / W.sum.toFloat))
        } finally {
            scan.close
        }
    }
}

python

def weighted_mean():
    n = int(input())
    X = [int(s) for s in input().split(" ")]
    W = [int(s) for s in input().split(" ")]
    print("{0:.1f}".format(sum([x * w for x, w in zip(X, W)]) / sum(W)))


if __name__ == '__main__':
    weighted_mean()

java

import java.io.*;
import java.util.*;
import java.util.stream.*;

public class Solution {

    public static void main(String[] args) {
       try (Scanner scan = new Scanner(System.in)) {
            int n = scan.nextInt();
            scan.nextLine();
            int[] X = Stream.of(scan.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
            int[] W = Stream.of(scan.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
            int s1 = IntStream.range(0, n).map(i -> X[i] * W[i]).sum();
            System.out.printf("%.1f\n", s1 / (float)IntStream.of(W).sum());
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读