加權(quán)平均 weighted mean
給一組數(shù)值的集合,和一組對(duì)應(yīng)的權(quán)重值的集合,則加權(quán)平均的計(jì)算如下:
加權(quán)平均計(jì)算公式
其中xi是元素的值而wi是元素對(duì)應(yīng)的權(quán)重.
元素值乘以對(duì)應(yīng)權(quán)重的乘積之和除以權(quán)重之和.
例如,集合x={1,3,5}和對(duì)應(yīng)的權(quán)重w={2,4,6}, 那么加權(quán)平均應(yīng)該是:
如果我們把這個(gè)舍入到標(biāo)量1,答案就是3.7
問題:
給一個(gè)有N個(gè)整數(shù)的數(shù)組X, 和一個(gè)數(shù)組W表示對(duì)應(yīng)X中元素的權(quán)重, 計(jì)算并打印出x元素的加權(quán)平均. 你的答案應(yīng)該精確到小數(shù)點(diǎn)后一位(例如,12.3)
輸入: 第一行是一個(gè)整數(shù)N,表示數(shù)組X和W的長(zhǎng)度.
第二行是以空格分隔的N個(gè)數(shù)字,即X數(shù)組的元素.
地三行是以空格分隔的N個(gè)數(shù)字,即W數(shù)組的元素.
約束:
- 5<=N<=50
- 0<xi<=100, xi是數(shù)組X中第i個(gè)元素
- 0<wi<=100, wi是數(shù)組X中第i個(gè)元素
輸出:
打印出加權(quán)平均,精確到小數(shù)點(diǎn)后一位
例如
5
10 40 30 50 20
1 2 3 4 5
結(jié)果
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());
}
}
}