• [京东2017实习生笔试] 通过考试


    时间限制C/C++语言:1000MS其它语言:3000MS

    内存限制C/C++语言:65536KB其它语言:589824KB

    题目描述

    小明同学要参加一场考试,考试一共有n道题目,小明必须做对至少60%的题目才能通过考试。考试结束后,小明估算出每题做对的概率,p1,p2,...,pn。你能帮他算出他通过考试的概率吗?

    输入

    输入第一行一个数n(1<=n<=100),表示题目的个数。第二行n个整数,p1,p2,...,pn。表示小明有pi%的概率做对第i题。(0<=pi<=100)

    输出

    小明通过考试的概率,最后结果四舍五入,保留小数点后五位。

    样例输入

    4

    50 50 50 50

    样例输出

    0.31250

    思路

    DP。dp[i][j]表示前i门课程通过j门的概率。则dp[i][j] = dp[i - 1][j - 1] * p[i] + dp[i - 1][j] * (1 - p[i])。

    代码

     1 import java.util.Scanner;
     2 
     3 public class Main {
     4 
     5     public static double solve(double[] p) {
     6         final int n = p.length;
     7         double[][] dp = new double[n + 1][n + 1];
     8         dp[0][0] = 1;
     9         for (int i = 1; i <= n; i++) {
    10             for (int j = 0; j <= i; j++) {
    11                 if (j == 0) {
    12                     dp[i][0] = dp[i - 1][0] * (1 - p[i - 1]);
    13                 } else {
    14                     dp[i][j] = dp[i - 1][j - 1] * p[i - 1] + dp[i - 1][j] * (1 - p[i - 1]);
    15                 }
    16             }
    17         }
    18 
    19         double ps = 0;
    20         for (int i = 0; i <= n; i++) {
    21             if (10 * i >= 6 * n) {
    22                 ps += dp[n][i];
    23             }
    24         }
    25         return ps;
    26     }
    27 
    28     public static void main(String[] args) {
    29         Scanner sc = new Scanner(System.in);
    30         int n = sc.nextInt();
    31         double[] p = new double[n];
    32         for (int i = 0; i < n; i++) {
    33             p[i] = (double) sc.nextInt() / 100;
    34         }
    35         System.out.println(String.format("%.5f", solve(p)));
    36     }
    37 }
  • 相关阅读:
    DUBBO+Zookeeper在Centos7中本地搭建及小案例
    【后台测试】手把手教你jmeter压测
    Netdata 是一款 Linux 性能实时监测工具
    Spring Boot(5) 集成Hibernate 日志配置
    FSTConfiguration 高性能序列化框架FST
    java BeanUtils.copyProperties
    Transformer-view java实体 转换视图 Lists.transform
    shell 命令学习
    Immutable集合
    Lists.transform的使用
  • 原文地址:https://www.cnblogs.com/deadend/p/6680137.html
Copyright © 2020-2023  润新知