这样的面试题你会吗

               

CC  程序员面试指南1

 

本题节选自《C/C++程序员面试指南》一书

 

面试题1:斯密斯夫妇握手问题

 

史密斯夫妇邀请另外四对夫妇就餐,已知他们每个人都不和自己握手,不和自己的配偶握手,且不和同一个人握手一次以上。在大家见面握手寒暄后,史密斯问大家握手了几次,每个人的答案都不一样。

 

问:史密斯太太握手几次?

 

1.所涉及的知识点

 

· 排除法

 

· 分析法

 

2.分析问题

 

解决本题可用排除法,把一些无关的信息先予以排除,可以确定的问题先确定,尽可能缩小未知的范围,以便于问题的分析和解决。这种思维方式在我们的工作和生活中都是很有用处的。根据已给的条件可知:

 

(1)总共10个人,每个人不与自己握手,不与配偶握手,不与同一个人握手超过一次,所以每个人最多握8次手,最少0次。

 

(2)史密斯先生问其他9个人握了几次手,各人回答不一样,所以每个人的握手次数应为0~8次,每种不同次数有1个人。可知除了斯密斯先生外,其他9个人的握手次数,如图12.1所示。

 

假设I握了8次手,即I与其配偶以外的所有人都握了手;可以假设I为史密斯太太,她握了八次手,即与史密斯先生以外的每个人都握了一次手。可以推知除斯密斯夫妇外的其他三对夫妇的握手次数至少为1,与上面推断已知的A的握手次数为0冲突。所以假设不成立。并可推知握手0次的A和握手8次的I为一对夫妇。实际的握手情况按夫妻分配可以参考图12.2。

 

clip_image002 clip_image004

 

图12.1 四对夫妇及史密斯夫人的握手次数 图12.2 五对夫妇中一对夫妇的握手情况

 

(3)根据(2)可知A夫妇其中一人,与每个人握手一次,另外一个人没有握手。所以可以排除夫妇A,即假设夫妇A没有参加聚会,其余七人的握手次数减1,此时参加聚会的人数为史密斯夫妇和另外三对夫妻8人。除史密斯先生外,其他7人的握手次数情况如图12.3所示。

 

假设H为史密斯太太,则斯密斯太太与其他三对夫妇每人握手一次,即其他6人的握手次数至少为1次,但是根据图12.3可知,B握手0次,所以假设不成立,即H不是史密斯太太,并可推知B和H是一对夫妇。去掉夫妇A后握手情况按夫妻分配可以参考图12.4。

 

clip_image006 clip_image008

 

图12.3 三对夫妇及史密斯夫人的握手次数 图12.4 四对夫妇中一对夫妇的握手情况

 

(4)去掉夫妇B后(即假设夫妇B没有参加聚会)其余五人的握手次数分配情况如下图12.5所示。

 

假设G为史密斯太太,则斯密斯太太与其他两对夫妇每人握手一次,即其他4人的握手次数至少为1次,但是根据图12.5可知,C握手0次,所以假设不成立,即G不是史密斯太太,并可推知C和G是一对夫妇。去掉夫妇B后握手情况按夫妻分配可以参考图12.6。

 

clip_image010 clip_image012

 

图12.5 两对夫妇及史密斯夫人的握手次数 图12.6 三对夫妇中一对夫妇的握手情况

 

(5)去掉夫妇C后(即假设夫妇C没有参加聚会)其余三人的握手次数分配情况如图12.7所示。

 

假设F为史密斯太太,则斯密斯太太与另外一对夫妇每人握手一次,这2人的握手次数至少为1次,但是根据图12.7可知,D握手0次,所以假设不成立,即F不是史密斯太太,并可推知D和F是一对夫妇。去掉夫妇B后握手情况按夫妻分配可以参考图12.6。

 

clip_image014 clip_image016

 

图12.7 一对夫妇及史密斯夫人的握手次数 图12.8 两对夫妇中一对夫妇的握手情况

 

而剩下的E便是史密斯太太。根据图12.1可知她总共握了四次手。

 

3.答案

 

请在此处向右拖动鼠标:史密斯夫人握了四次手

 

查找这9个人中谁是史密斯太太,和查找这9个人中谁不是史密斯太太的结果是一样的。这就是排除法的实现技巧。

 

CC  程序员面试指南1

 

书名:C/C++程序员面试指南

 

作者:杨国祥 等编著

 

ISBN 978-7-121-10359-9

 

出版日期:2010年3月出版

 

定价:49.00元

 

宣传语

 

从企业面试的角度来梳理C/C++程序员的技术功底

 

以技术经理的眼光来审视对C/C++编程知识的掌握

 

内 容 简 介

 

C、C++语言是IT行业的主流编程语言,也是很多程序员必备的软件基本功,是软件开发行业招聘考查的重点。本书以流行的面试题讲解为主要内容,介绍了C、C++语言基本概念,包括保留字、字符串、指针和引用、结构体、库函数等各个方面的基础知识,介绍了面向对象编程基本概念,包括如何实现继承、多态和封装等。还介绍了排序算法及数据结构的实现,包括链表、堆栈、队列和树。此外,本书开始用两章篇幅详细介绍了中英文面试的注意事项、常见问题及程序员的职业规划等软件工程师的常识。最后四章详细讲解了现在流行的智力测试题。

 

本书的特点是在详细介绍C、C++面试中常见技术问题的同时,还详细讲解了智力测试的基本方法及数学能力、推理能力和反应能力的常见测试题。本书适合正在找工作的应届毕业生,也适合想要换工作而基础知识不扎实或不熟悉智力测试的老程序员。   

购买地址:中国互动出版网

 

同类书推荐:.NET程序员面试指南(含光盘1张)  Java程序员面试指南    

本书详细信息:http://www.broadview.com.cn/10359    
更多图书信息:www.broadview.com.cn    
想即时获取更多图书及活动资讯,赶快加入博文视点读者俱乐部 吧!

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

猜你喜欢

转载自blog.csdn.net/qq_43678612/article/details/86676943