Hackrank 統(tǒng)計(jì)十日通(第一天) 加權(quán)平均

譯自 Day 0: Weighted Mean

加權(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());
        }
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容