Legendary Items-微软实习生笔试第一题
题目如下:

这道题难点不仅在于正确理解题意,判断递归条件,更在于用数学方法推出解决公式。因为N最大为1百万,而内存只有256MB, 所以暴力递归肯定会超时,超空间。
不过,我才疏学浅,又没有大量时间去深究,所以只写出了暴力递归算法。进一步优化的话,可以考虑P在迭代很久后会变为0这一事实,也许可以进一步节省时空消耗。
下面给出算法,由于我注释写的很详细,这里就不进一步解释了。
import java.util.Scanner;
public class Main { static int P;
static int Q;
static int N; static double result = 0; /**
*
* @param num 当前获得宝物个数,初始化为0
* @param arrayProb 保存每次路径参数
* @param prob 当前路径成功概率,初始化为0
* @param pathLen 当前路径长度,初始化为0
* @param p 初始成功概率,初始化为P
*/
public static void getPath(int num,int[] arrayProb ,int prob, int pathLen, int p){
if (num < N)
{
//首先递归左子树,也就是成功路径子树,成功只有三种情况
if (prob >= 100){
arrayProb[pathLen] = 100;
getPath(num+1, arrayProb, 0, pathLen+1, (int)(p/Math.pow(2,num+1)));
}else if(prob > 0){
arrayProb[pathLen] = prob;
getPath(num+1,arrayProb,0, pathLen+1, (int)(p/Math.pow(2,num+1)));
} else if (p > 0){
arrayProb[pathLen] = p;
getPath(num+1, arrayProb, 0, pathLen+1, (int)(p/Math.pow(2,num+1)));
} //再遍历同层右子树,也就是失败路径概率。prob<100,才有失败可能。
if (prob < 100 && p < 100) {
int tmp;
if(prob == 0){//只有第一次或者成功后prob才会为0
tmp = 100 - p;
prob = p;
}else {
tmp = 100 - prob;
}
arrayProb[pathLen] = tmp;
getPath(num, arrayProb, prob + Q, pathLen + 1,p);
}
} else{
double tmp = 1;
for (int i = 0; i < pathLen; i++) {
tmp *= 0.01 * arrayProb[i];
System.out.printf(arrayProb[i] + " ");
}
System.out.println();
tmp *= pathLen;
result += tmp;
}
} public static void main(String[] args) {
// write your code here
int[] array = new int[100000];
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()){
result = 0;
P = scanner.nextInt();
Q = scanner.nextInt();
N = scanner.nextInt();
getPath(0,array,0,0,P);
System.out.printf("%.2f", result);
}
}
}
Legendary Items-微软实习生笔试第一题的更多相关文章
- 金山网络2014春季Android实习生招聘-成都站-笔试第一题
实现单例模式,并实现方法int getResult(float a),将a*8后返回. package jinshanwangluo.exam; /** * @author guoxm * @date ...
- 电子数字 网易游戏在线笔试 第一题 hihocoder
题目链接 http://hihocoder.com/contest/ntest2016spring1/problem/1 这个题目有几个算法考点: (1)对于一个LED数码管(由7个发光二极管封装在一 ...
- hihocoder #1289 : 403 Forbidden (2016 微软编程笔试第二题)
#1289 : 403 Forbidden 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Little Hi runs a web server. Sometimes ...
- 18年今日头条笔试第一题题解:球迷(fans)
其实本题是加强版,原数据是100*100的,老师为了尊重我们的智商加成了3000*3000并进行了字符串处理…… 上原题~ 球迷 [问题描述] 一个球场C的球迷看台可容纳M*N个球迷.官方想统计一共有 ...
- [算法 笔记]2014年去哪儿网 开发笔试(续)第一题BUG修正
上一篇的blog地址为:http://www.cnblogs.com/life91/p/3313868.html 这几天又参加了一个家公司的笔试题,在最后的编程题中竟然出现了去哪儿网开发的第一题,也就 ...
- hihocoder1489 Legendary Items 概率期望
Little Hi is playing a video game. Each time he accomplishes a quest in the game, Little Hi has a ch ...
- DP - tencent2016实习生笔试A
tencent2016实习生笔试A Problem's Link ------------------------------------------------------------------- ...
- 网易实习笔试真题C/C++
刚做的时候根本就没有想到解题思路,刚好看到了别人的思路,自己写了一下.里面对unordered_map及vector二维数组的建立很灵活,另外区别了一下map,unordered_map,hash_m ...
- 美团点评2017校招笔试真题-算法工程师A
美团点评2017校招笔试真题-算法工程师A 1.下面哪种STL容器的实现和其它三个不一样 A. set B. deque C. multimap D. map 正确答案: B STL的容器可以分为以下 ...
随机推荐
- 关于DOM的理解
每个载入浏览器的HTML文档都会生成一个Document对象 Document对象使我们可以从脚本中对HTML中的所有元素进行访问 DOM实际上是以面向对象方式描述的对象模型,它将文档建模为一个个对象 ...
- linux目录结构解析
"/" :Linux文件系统的入口.也是最高一级的目录. "/bin":基本系统所需要的命令,功能和"/usr/bin"类似,这个目录下的文 ...
- 新手学js的效果图1---( 淘宝等商城货物查看特效)
本人结合之前所学一起写了,多个特效,只是新手自己瞎鼓捣的,思路清晰,具体实现的货物放大镜等,替换当中的img地址就可以查看特效 <!DOCTYPE html> <html lang= ...
- Javascript匿名函数
单独的匿名函数无法运行,就算能运行,也无法调用.解决办法如下: 法1. //把匿名函数赋值给变量 var box=function(){ return "Lee"; }; aler ...
- wamp下安装php的xdebug调试的方法
wamp下安装php的xdebug调试的方法 将下载好的php_xdebug-2.1.2-5.2-vc6.dll放在D:/wamp/php/ext/php_xdebug-2.1.2-5.2-vc6.d ...
- UI设计需具备的几大素质
近年来,IT产业对于高端技术人才需求加大,特别是北上广和知名企业对人才需求更为迫切,UI设计人员的正在接受UI培训的学员都赢认识到UI设计在未来要求将越来越高,交互设计越来越新颖也将对用户更加友好,兄 ...
- 事件日志:无法加载站点/服务的所有 ISAPI 筛选器。因此启动中止。
事件日志:无法加载站点/服务的所有 ISAPI 筛选器.因此启动中止. Service Unavailable解决 故障状态:Internet 信息服务(IIS)管理器 里 应用程序池出现错误 “应用 ...
- Fraction to Recurring Decimal leetcode
Given two integers representing the numerator and denominator of a fraction, return the fraction in ...
- wemall app商城源码Android之Native(原生)支付模式一demo
wemall-mobile是基于WeMall的Android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享Native(原生)支付模式一demo,供技术 ...
- 3404: [Usaco2009 Open]Cow Digit Game又见数字游戏
3404: [Usaco2009 Open]Cow Digit Game又见数字游戏 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 72 Solved ...