加权平均 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<=N<=50
- 0<xi<=100, xi是数组X中第i个元素
- 0<wi<=100, wi是数组X中第i个元素
输出:
打印出加权平均,精确到小数点后一位
例如
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());
}
}
}