美文网首页程序员
Hackrank 统计十日通(第一天) 加权平均

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

作者: cfcodefans | 来源:发表于2017-03-29 17:24 被阅读0次

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

    相关文章

      网友评论

        本文标题:Hackrank 统计十日通(第一天) 加权平均

        本文链接:https://www.haomeiwen.com/subject/whvsottx.html