阿里巴巴面试题
2013-09-26 20:20
162 查看
/** * 阿里巴巴面试题 * 有一堆石子共100枚,甲乙轮流从该堆中取石子,每次可以取2、4或6枚,取得最后的石子的玩家为赢家,若甲先取,则: * A 谁都无法必胜 * B 乙必胜 * C 甲必胜 * D 不确定 * 闲来蛋疼就做这道题试试 思路分析 * 假设每人都只能取2枚,那么一共可以取50次,所以甲先取的话,那么最后一次必然是乙 * 同理,若每次只能取4枚,那么一共可以取25次,所以甲先取,最后一次必然是甲,但是若每次取6枚的话,那么就不能整除, * 所以,此题难在关键不确定每次甲或乙会取几个,但是我们可以看到一个共性,如果取石子的次数是奇数的话,那么必然是甲胜,若取石子 * 的次数是偶数的话,那么必然是乙胜,看看每次甲和乙取石子的组合有哪些: *首先,甲每次有三种选择,乙也每次有三种选择,所以一共是3*3=9种选择 * A:甲 2 乙 2 和是 4 * B:甲 2 乙 4 和是 6 或者 甲 4 乙 2 和是 6 * C:甲 2 乙 6 和是 8 或者 甲 6 乙 2 和是 8 * D:甲 4 乙 4 和是 8 * E:甲 4 乙 6 和是10 或者 甲 6 乙 4 和是 10 * F:甲 6 乙 6 和是 12 *由上分析可以看出 100/4=25可以整除,100/6=16余4,100/8=12余4,100/10=10可以整除,100/12=8余4 *所以我们假设甲先取4个,那么剩下96个,因为96是8的倍数,所以无论乙取几个,甲只要取(8-乙取的)个石子,就必然能保证96/8=12,最后必然是甲胜 *同理我们再次假设甲先取2个,那么剩下98个,不能整除8,余2,所以最后一次是乙取,所以必是乙胜 *我们再假设甲先取6个,那么剩下94个,不能整除8,余6,所以不确定是甲胜还是乙胜,因为最后剩下的6个乙可以取完,也可以不取完,完全看乙的选择而定,所以选A */ //以下程序测试在甲先取4个的情况 public class AliBabaTest { public static void main(String[] args) { int numOfA;//表示甲取的个数 int numOfB;//表示乙取的个数 int num = 96;//表示甲先取4个之后,剩余的石子总数 int count = 1;//计数器 while(num!=0){ int random = (int) (3*Math.random());//[0,1),[0,3) //random产生的随机数,每次都是0、1或2,如果是0,那么就假设乙取2个,如果是1就假设乙取4个,如果是2就假设乙取6个 if(random==0){ numOfB = 2; numOfA = 8-numOfB; num -= 8; System.out.println("第"+count+"轮-->"+"乙取了:"+numOfB+"个石子,甲取了:"+numOfA+"个石子"); count++; }else if(random==1){ numOfB = 4; numOfA = 8-numOfB; num-=8; System.out.println("第"+count+"轮-->"+"乙取了:"+numOfB+"个石子,甲取了:"+numOfA+"个石子"); count++; }else if(random==2){ numOfB = 6; numOfA = 8-numOfB; num -= 8; System.out.println("第"+count+"轮-->"+"乙取了:"+numOfB+"个石子,甲取了:"+numOfA+"个石子"); count++; }else{ System.out.println("随机数产生错误..."); } } System.out.println("甲获得了胜利..."); } } /** * 以下是某次的运行结果: 第1轮-->乙取了:6个石子,甲取了:2个石子 第2轮-->乙取了:2个石子,甲取了:6个石子 第3轮-->乙取了:6个石子,甲取了:2个石子 第4轮-->乙取了:2个石子,甲取了:6个石子 第5轮-->乙取了:4个石子,甲取了:4个石子 第6轮-->乙取了:6个石子,甲取了:2个石子 第7轮-->乙取了:4个石子,甲取了:4个石子 第8轮-->乙取了:6个石子,甲取了:2个石子 第9轮-->乙取了:6个石子,甲取了:2个石子 第10轮-->乙取了:2个石子,甲取了:6个石子 第11轮-->乙取了:6个石子,甲取了:2个石子 第12轮-->乙取了:2个石子,甲取了:6个石子 甲获得了胜利... */ //此题剩下的最大疑问点就是为什么选择了8(指的是每次甲乙一轮取得石子数之和)这个神奇的数字,这是因为8是比6大的最小的偶数,假设选择的数比6小,那么乙取了6个之后,甲就没办法取了, //又假设选择的数比8大,那么乙取了2个之后,甲最大也只能取6,所以一样没办法取了 //若有遗漏之处,还望补充
相关文章推荐
- 为什么你在宾馆里一打开热水龙头就有热水流出来? - Google, 谷歌,百度,baidu,阿里巴巴,alibaba,微软,华为,huawei面试题
- 如何在子函数中改变main函数中的变量的值——阿里巴巴一面试题
- 阿里巴巴常考面试题及汇总答案
- 【转载】阿里巴巴常考面试题及汇总答案
- 阿里巴巴常考面试题及汇总答案
- 阿里巴巴面试题之英文语句分割问题
- 阿里巴巴常考面试题及汇总答案
- 阿里巴巴Web前端开发面试题赋答案
- 年薪20万的阿里巴巴Python工程师面试题
- 一道阿里巴巴面试题--海量数据查找
- 阿里巴巴面试题--数组
- 阿里巴巴部分面试题
- [历年IT笔试题]2014阿里巴巴面试题(北京站)
- 要是让你清洗整个西雅图的所有窗子,你会收取多少费用? - Google, 谷歌,百度,baidu,阿里巴巴,alibaba,微软,华为,huawei面试题,
- 面试题集锦和答案收集 - 微软,谷歌,华为,阿里巴巴等
- 阿里巴巴前端面试parseInt()函数的面试题
- 阿里巴巴常考面试题及汇总答案
- 阿里巴巴常考面试题及汇总答案
- 试题_08年阿里巴巴前端面试题
- 阿里巴巴面试题之二维数组有序