对微软面试题中金子分段问题的延伸及总结
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
| Date : 2002.03.08 |
| Author : Seraph Chutium |
| Homepage : http://com.6to23.com/ |
| |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
声明:写的比较仓促,基本思想肯定是没错,如果表述上有错误望大家见谅,
若有严重的逻辑错误希望得到大家指正。(可以来留言簿留言讨论)
学习过二进制算法的朋友遍可略过此文,只是举一小例胡乱说说2^n与二进制数的关系而已。
编程高手更可不必为此费时,诸位大侠如能幸得闲暇,定能写的比这个明了深刻数倍。
1. 试题分析延伸
在《程序员》杂志试刊一中曾刊登过一道微软用来面试的题目:
工人为你工作7天,回报为一根金条,必须在每天付给他们一段,且只能截2次,你将如何付费?
我们再来看我自己编的一道题目:如何将7块金子放入3个箱子中,使我可以整箱取走任意块数?
我们可以很容易的发现,这样的两道题目实质是一样的,而其答案也是相同的。
即:将金条切成 1,2,4 三段,或者说将7块金子分别以 1,2,4 块放入箱子中。
这道题目是比较简单的,但是如果用同样的情景,出一道这样的题呢?
工人为你工作365天,回报为一根金条,必须在每天付给他们一段,且只能截9次,你将如何付费?
或者说如何将365块金子放入9个箱子中,使我可以整箱取走任意块数?
用这样的数字可能比较难看出其中的玄机,我们换做这样的一组数:
………………255天,…………………………7次,你将如何付费?
或者说如何将255块金子放入8个箱子中,可以整箱取走任意块数?
看到8和255这样两个数字想必大家就会马上意识到255=2^8-1。
那么这样的一组数字和金子分段有什么关系呢?我们来看看上面两个更复杂些的题目的答案。
365天的情况:切 8 次就等于将原金条分成 9 段装入 9 个箱子,
则其分法为 :I: 1, II: 2, III: 4, IV: 8, V: 16, VI: 32, VII: 64, VIII: 128,
IX: 365-255=110.
255天的情况:切 7 次就等于将原金条分成 8 段装入 8 个箱子,
则其分法为 :I: 1, II: 2, III: 4, IV: 8, V: 16, VI: 32, VII: 64, VIII: 128.
2. 对此类题目的总结
这样,我们不难发现,m 个箱子所能完成上述过程所装的“金子”数最多为 2^m-1 个。
而此时箱子中的“金子”数分别为:2^0, 2^1, 2^2, ... 2^(m-1) 个。
由此我们就可导出对于任意一个自然数 N ,都可以将它分成若干份,使我们可以整份
取出任意数量。
在(0,N)中必有一个最大的 2^n 值,此自然数 N 就可以分成 n+1 份,
每份中数值分别为:2^0, 2^1, 2^2, ... 2^(n-1), N-2^n
3. 寻根问源
那么这是为什么呢?
我们拿最简单的 7, 8, 15, 16 来做个说明。
先写出 16 以内十进制数和二进制数的对应表,我们从中会悟出一些道理。
0
0
1 2
1 10
3 4
11 100
5 6 7 8
101 110 111 1000
9 10 11 12 13 14 15 16
1001 1010 1011 1100 1101 1110 1111 10000
而如果分 7, 8, 15, 16 这四个数为几份,分别应该是:
7: 1, 2, 4
16: 1, 2, 4, 8, 1
对于 7,如果我们要拿出 5 (101) 就是 1,4 两份;拿出 7 (111) 就是 1,2,4 三份。
对于16,如果我们要拿出 11(1011) 就是 1,2,8 三份;拿出12 (1100) 就是 4,8 两份;
拿出 14(1110) 就是 2,4,8 三份;拿出 15(1111) 就是1,2,4,8四份;
这样,很明显的可以看出,对于任意一个自然数 N ,依照前面讲过的方法,分成 n+1 份后,
如果要拿出N,自然就取出全部的n+1份即可;
如果要拿出一定的数量 a (a<=N-1, a=0,1,2,3...),
将它写成二进制数后,哪一位上的数是1,就拿出那一份,组成的就是这个数 a 。
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
| Date : 2002.03.08 |
| Author : Seraph Chutium |
| Homepage : http://com.6to23.com/ |
| |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
分享到:
相关推荐
首先,编程题是微软面试中必不可少的部分,可能包括C++、Java、Python等主流编程语言的题目。面试官会关注候选人的代码质量、逻辑思维以及问题解决能力。例如,可能会要求你实现一个排序算法,或者解决一个经典的...
微软公司面试人员的面试题解答,google微软等大公司面试题,软件架构师的设计。
1. **英文原版面试题**:这101道题目体现了微软对求职者英语能力的要求,同时也展示了微软关注的问题类型,可能涉及算法、数据结构、操作系统、网络、软件工程等多个领域。通过这些题目,应聘者可以了解微软期望他们...
微软作为全球知名的科技公司,其面试题不仅考察候选人的专业技能,还涉及逻辑思维、问题解决和创新能力。以下是对部分微软面试题的详细解答: **第一组题目解析:** 1. **烧绳计时**:烧一根绳子两端同时点燃,...
“微软面试题及附标准答案” 本资源提供了微软面试题及答案,旨在帮助用户更好地准备微软面试。该资源涵盖了多种题型,包括基本题型、没有答案型、难题和超难题。这些题目涵盖了逻辑思维、问题解决、反应能力等多...
本压缩包中的“微软面试试题及答案.txt”文件,很可能是收集了一些在微软面试过程中可能会遇到的问题及其解答,旨在帮助应聘者更好地准备面试。 面试题目的类型通常包括技术问题、行为问题和情境问题。对于技术问题...
本资源汇集了微软面试中常见的C/C++试题,涵盖了函数返回值、引用、常引用、函数参数传递、返回值类型等多个领域,涵盖了C/C++语言的核心知识点。 1. 求函数的返回值 函数func的返回值是通过统计x的二进制表示中1...
面试题,微软面试题答案,微软面试题答案,微软面试题答案
Java中的IO与NIO面试题 Java反射面试题 Java序列化面试题 Java注解面试题 多线程&并发面试题 JVM面试题 Mysql面试题 Redis面试题 Memcached面试题 MongoDB面试题 Spring面试题 Spring Boot面试题 Spring Cloud面试题...
2. **数据分析与问题解决**:IBM业务涉及大数据分析和人工智能,因此面试中可能会出现涉及统计分析、数据挖掘和算法设计的问题。 3. **项目经验**:IBM重视实际操作经验和项目管理能力,面试者需要准备能够展示自己...
本文中提到的面试题涉及到了数据结构和算法的知识,特别是二元查找树的特性以及如何将其转换为双向链表,以及如何设计一个支持高效 min 查询的栈。这些问题考察了面试者对数据结构的理解、问题解决能力和优化意识。...
【微软面试题详解】 微软面试题以其独特性和挑战性闻名,旨在考察候选人的逻辑思维、问题解决、反应速度和创新能力。以下是对部分题目的详细解析: ...在实际面试中,答题速度和思维清晰度也是重要的评估标准。
microsoft微软的面试题完整版及答案
面试中可能会要求将二元查找树转换成双向链表。这种类型的问题,除了考察对应数据结构的理解和操作能力外,还考察了应聘者是否能够使用递归或迭代的方法来实现复杂的数据结构转换。对于双向链表的转换,一个常见的...
这些题目是微软面试中的一些经典问题,涵盖了逻辑推理、数学、概率、策略和创新思维等多个方面。这些问题旨在考察候选人的解决问题的能力、思维敏捷度和创新能力,同时也是对面试者临场应变和压力处理能力的测试。 ...
在FPGA面试题中,往往会深入考查应聘者对于同步逻辑与异步逻辑、时序设计、建立时间与保持时间、亚稳态、系统最高速度计算以及流水线设计思想的理解和应用。 首先,同步逻辑与异步逻辑是两种不同类型的数字电路设计...
在Java面试中,常见的知识点包括但不限于:基础语法(如类、对象、接口、继承、多态)、异常处理、垃圾回收机制、集合框架(ArrayList、LinkedList、HashMap、TreeMap等)、多线程、IO流、网络编程、反射、设计模式...
面试题总结是一个长期工作,面试不停,这份面试题总结就不会停。以后会慢慢把Java相关的面试题、计算机网络等都加进来,其实这不仅仅是一份面试题,更是一份面试参考,让你熟悉面试题各种提问情况,当然,项目部分,...
【微软面试100题系列】是一套针对应聘者准备微软公司面试的综合资源,包含了11篇文章,总计300多道问题,旨在帮助求职者深入理解和掌握与Windows操作系统和微软技术栈相关的知识,从而在面试中表现出色,顺利获得...
web前端笔试题面试题汇总+前端优化总结 web前端笔试题面试题汇总+前端优化总结 web前端笔试题面试题汇总+前端优化总结 web前端笔试题面试题汇总+前端优化总结 web前端笔试题面试题汇总+前端优化总结 web前端笔试题...