京东-2017-春招实习-通过考试

感谢holy_hap大神的思路,转载:http://blog.csdn.net/u011746554/article/details/70233552

题目描述 
小明同学要参加一场考试,考试一共有n道题目,小明必须做对至少60%的题目才能通过考试。考试结束后,小明估算出每题做对的概率,p1,p2,…,pn。你能帮他算出他通过考试的概率吗? 
输入 
输入第一行一个数n(1<=n<=100),表示题目的个数。第二行n个整数,p1,p2,…,pn。表示小明有pi%的概率做对第i题。(0<=pi<=100) 
样例输入 

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

解题思路 
动态规划,假设dp[i][j]表示i道题,答对j道题的概率,与子问题的递推关系如下公式:前i-1已经答对j道,第i道题为答对。前i-1答对j-1道题,第i道题答对。 
dp[i][j]=dp[i-1][j]*(1-p[i])+dp[i-1][j-1]*p[i]; 
编程是得注意初始条件,上公中i,j从1开始。初始条件的设置:dp[0][0]=1;dp[i][0]=dp[i-1][0]*(1-p[i]);

 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<math.h>
 4 #include<string.h>
 5 using namespace std;
 6 int main(){
 7     double dp[101][101];
 8     memset(dp,0,sizeof(dp));
 9     int data[101];
10     int n;
11     cin>>n;
12          for(int i=1;i<=n;i++ ){
13           scanf("%d",&data[i]);
14           }
15     dp[0][0]=1;
16         for(int i=1;i<=n;i++){
17         dp[i][0]=dp[i-1][0]*(100.0-data[i])/100;
18         for(int j=1;j<=i;j++)
19         {
20             dp[i][j]=dp[i-1][j]*(100.0-data[i])/100+dp[i-1][j-1]*data[i]/100.0;
21         }
22         }
23
24     int mi=ceil(0.6*n);
25     double res=0;
26     for(int i=mi;i<=n;i++){
27         res+=dp[n][i];
28     }
29     printf("%.5f",res);
30 }
时间: 2024-10-14 21:52:15

京东-2017-春招实习-通过考试的相关文章

网易2017春招笔试真题编程题集合题解

01 双核处理 题目 一种双核CPU的两个核能够同时的处理任务,现在有n个已知数据量的任务需要交给CPU处理,假设已知CPU的每个核1秒可以处理1kb,每个核同时只能处理一项任务.n个任务可以按照任意顺序放入CPU进行处理,现在需要设计一个方案让CPU处理完这批任务所需的时间最少,求这个最小的时间. 输入描述 输入包括两行:第一行为整数n(1 ≤ n ≤ 50)第二行为n个整数lengthi,表示每个任务的长度为length[i]kb,每个数均为1024的倍数. 输出描述输出一个整数,表示最少需

5、不等式数列--百度2017春招

[编程题] 不等式数列 时间限制:1秒 空间限制:32768K 度度熊最近对全排列特别感兴趣,对于1到n的一个排列,度度熊发现可以在中间根据大小关系插入合适的大于和小于符号(即 '>' 和 '<' )使其成为一个合法的不等式数列.但是现在度度熊手中只有k个小于符号即('<'')和n-k-1个大于符号(即'>'),度度熊想知道对于1至n任意的排列中有多少个排列可以使用这些符号使其为合法的不等式数列. 输入描述: 输入包括一行,包含两个整数n和k(k < n ≤ 1000) 输出

蘑菇街2017春招笔试

现在有一个n个证书的序列,交换两个相邻的数的位置直到整个序列按照升序排列, 那么将整个序列排好需要交换多少次? 例如 1,2,3,5,4 只需要交换一次即可. 第一行输入一个正整数n(n<100),表述数字序列元素个数,占一行: 接下来一行输入从1到n的n个整数序列,中间用空格隔开 输入: 4 4 3 2 1输出: 6 1 /************************************************************************* 2 > File Na

百度2017春招笔试真题编程题之有趣的排序

问题描述: 度度熊有一个N个数的数组,他想将数组从小到大 排好序,但是萌萌的度度熊只会下面这个操作: 任取数组中的一个数然后将它放置在数组的最后一个位置. 问最少操作多少次可以使得数组从小到大有序? 输入描述: 首先输入一个正整数N,接下来的一行输入N个整数.(N <= 50, 每个数的绝对值小于等于1000) 输出描述: 输出一个整数表示最少的操作次数. 示例1 输入 4 19 7 8 25 输出 2-----------------------------------------------

进制均值(京东2017秋招真题)

思路:利用取余数方法可以得到转换进制之后数字表示的所有位数,本题只求和的平均值,可以不严格       考虑正排列或者逆排列 之后使用fractions的Fraction函数,方便满足需要的分数格式要求 语句:fractions的Fraction函数  Fraction(a,b)中a表示分子,b表示分母 python代码: # -*- coding: utf-8 -*- import fractions as f while 1:     number=[]     a=int(raw_inpu

采购单(京东2017秋招真题)

本来也不算很难的一道题,但是总是只通过60% 或者 80% 一眼就看出思路,代码也不难的题就是不能全部通过也是神烦,应该是格式上的问题,也不算完全弄明白了,简单说说,作为一种经验. 思路:给价钱 和 每种物品的个数排序 最贵:最高价买最多的物品,累加 最低:最低价买最多的物品.累加 语句:list.count()    list.sort()    set(list)等 以下为正确的python语句 while 1:     r = raw_input()     if r != '':    

百度2017春招笔试真题编程题集合之寻找三角形

题目描述 三维空间中有N个点,每个点可能是三种颜色的其中之一,三种颜色分别是红绿蓝,分别用'R', 'G', 'B'表示. 现在要找出三个点,并组成一个三角形,使得这个三角形的面积最大.但是三角形必须满足:三个点的颜色要么全部相同,要么全部不同. 输入描述: 首先输入一个正整数N三维坐标系内的点的个数.(N <= 50) 接下来N行,每一行输入 c x y z,c为'R', 'G', 'B' 的其中一个.x,y,z是该点的坐标.(坐标均是0到999之间的整数) 输出描述: 输出一个数表示最大的三

百度2016笔试(算法春招实习)

4.23 10:00更新.编程题1的Python实现.仅供參考.源代码见页尾 4.23 20:35更新,编程题2的Python实现.源代码见尾页 百度的题还是很偏重算法的.总体来讲难度比較高.尤其是编程题,以下附上原题: 选择题 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" > 问答题 主观题 wat

去哪儿网2017春招在线笔试

第一题,给二叉树的先序遍历和中序遍历,求层序遍历. 这个...大二做的... 根据先序和中序的性质,先序第一个节点一定是根,在中序中找到根的位置,左边的就是左子树,右边的就是右子树,递归就好. 递归建好树  层先遍历需要通过队列实现. #include <bits/stdc++.h> using namespace std; struct bi_tree { int val; bi_tree *left, *right; }; bi_tree *build_tree(int a[], int