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的容器可以分为以下 ...
随机推荐
- Debug和Release区别
VC下Debug和Release区别 最近写代码过程中,发现 Debug 下运行正常,Release 下就会出现问题,百思不得其解,而Release 下又无法进行调试,于是只能采用printf方式逐步 ...
- devexpress chartcontrol实现非连续点数据的显示
1.先上图: 其中暗红的曲线中数据不连续的,在实际开发中可能也会遇到这种情况,由于断电或其他原因导致部分日期数据无法采集,如果按一般情况来显示可能会显示如下图所示: 图中可以看出非连续曲线中,3月5号 ...
- c++中,int *a=new int(120)语句的意思
int *a=new int(120); 申请一个整型变量空间,赋初值为120,并定义一个整型指针a指向该地址空间 int *a=new int[120]; 申请120个整型变量空间,没有赋初值,并定 ...
- 【前端】:jQuery上
前言: 今天写一篇jQuery,发现内容太多了,那就分成两篇写吧--写完jQuery基础知识后会再写一些jQuery实例~~ jQuery下载.jQuery是一个兼容多浏览器的javascript库, ...
- 操作符、语句、函数——Javascript高级程序设计
1.操作符 一元操作符:++.--放在变量前后的区别,+.—表示正负 位操作符:64位存储.32位计算,对NOT.AND.OR.XOR.<<.>>.>>>的掌 ...
- Binary Search Tree Iterator leetcode
Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the ro ...
- strtok、strtok_s、strtok_r 字符串分割函数
1.strtok函数 函数原型:char * strtok (char *str, const char * delimiters); 参数:str,待分割的字符串(c-string):delimit ...
- 阿里宣布Atlas正式开源:带你重返App开发的田园时代
继Weex之后,阿里在移动技术领域又有开源大动作. 3月13日,手机淘宝安卓客户端容器化框架Atlas正式宣布开源(https://github.com/alibaba/atlas ).Atlas由阿 ...
- Node.js web快速入门 -- KoaHub.js
介绍 KoaHub.js -- 基于 Koa.js 平台的 Node.js web 快速开发框架.可以直接在项目里使用 ES6/7(Generator Function, Class, Async & ...
- webots自学笔记(四)传感器API使用、查看官方文档
原创文章,来自“博客园,_阿龙clliu” http://www.cnblogs.com/clliu/,转载请注明原文章出处. 不能说webots的学习资料少,只能说 ...