号称难死人的苹果笔试题(附正解哦)

合集下载

iOS笔试题01

iOS笔试题01

1>#import和#include都能完整地包含某个文件的内容,#import能防止同一个文件被包含多次2>@class仅仅是声明一个类名,并不会包含类的完整声明;@class还能解决循环包含的问题3>#import <> 用来包含系统自带的文件,#import “”用来包含自定义的文件1>readwrite:同时生成get方法和set方法的声明和实现2>readonly:只生成get方法的声明和实现3>assign:set方法的实现是直接赋值,用于基本数据类型4>retain:set方法的实现是release旧值,retain新值,用于OC对象类型5>copy:set方法的实现是release旧值,copy新值,用于NSString、block等类型6>nonatomic:非原子性,set方法的实现不加锁(比atomic性能高)1>@property (nonatomic, retain) NSString *name;- (void)setName:(NSString *)name{if (_name != name) {[_name release];_name = [name retain];}}2>@property(nonatomic, copy) NSString *name;- (void)setName:(NSString *)name{if (_name != name) {[_name release];_name = [name copy];}}1>编译时是NSString类型2>运行时是NSData类型1>常用OC类型:NSString、NSArray、NSDictionary、NSData、NSNumber等2>OC对象需要手动管理内存,C的基本数据类型不需要管理内存id声明的变量能指向任何OC对象1>每个对象都有一个引用计数器,每个新对象的计数器是1,当对象的计数器减为0时,就会被销毁2>通过retain可以让对象的计数器+1、release可以让对象的计数器-13>还可以通过autorelease pool管理内存4>如果用ARC,编译器会自动生成管理内存的代码1>只要调用了alloc、copy、new方法产生了一个新对象,都必须在最后调用一次release或者autorelease2>只要调用了retain,都必须在最后调用一次release或者autorelease3>@property如果用了copy或者retian,就需要对不再使用的属性做一次release操作4>如果用了ARC,另外讨论NSMutableArray* ary = [[NSMutableArray array] retain];NSString *str = [NSString stringWithFormat:@"test"]; // 1[str retain]; // 2[ary addObject:str]; // 3NSLog(@"%d", [str retainCount]);[str retain]; // 4[str release]; // 3[str release]; // 2NSLog(@"%d", [str retainCount]);[ary removeAllObjects]; // 1NSLog(@"%d", [str retainCount]);结果:3、2、11>创建线程的方法NSThreadNSOperationQueue和NSOperationGCD2>主线程中执行代码[self performSelectorOnMainThread: withObject: waitUntilDone:];[self performSelector: onThread:[NSThread mainThread] withObject: waitUntilDone:];dispatch_async(dispatch_get_main_queue(), ^{});3>延时执行double delayInSeconds = 2.0;dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW,(int64_t)(delayInSeconds * NSEC_PER_SEC));dispatch_after(popTime, dispatch_get_main_queue(), ^(void){});[self performSelector: withObject: afterDelay:];[NSTimer scheduledTimerWithTimeInterval: target: selector: userInfo: repeats:];。

ios开发工程师笔试题及答案

ios开发工程师笔试题及答案

ios开发工程师笔试题及答案xxios开发工程师笔试题及答案1 iOS中传值的方式属性代理通知单例 block2 写一个单例代理类别单例+(id)allocWithZone:(struct _NSZone *)zonestatic Person *person;static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{person = [super allocWithZone:zone];});return person;+(Person *)sharePersonreturn [[self alloc] init];3 info.plist 和Prefix.pch的用处info.plist项目的配置属性Prefix.pch1.存放一些全局的宏(整个项目中都用得上的宏)2.用来包含一些全部的头文件(整个项目中都用得上的头文件)3.能自动打开或者关闭日志输出功能4iOS中是否有多线程?怎么实现多态?没有分类和协议5 多线程有哪些?主线程和次线程有什么区别?怎么通信?NSThread GCD NSOperation主线程不需要创建就存在,子线程需要创建,初始时候不存在更新UI必须在主线程而进行延时操作一般都在子线程-(void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)waitdispatch_async(dispatch_get_main_queue(),<#^(void)block#>)6 数据存储的方式1 plist2 归档3 SOLite4CoreData7jason解析遇到大量数据解析过程时,在内存上的`优化办法利用json的反序列话的几个代理方法,实现大数据的分割,解析,拼接,保存,从而降低内存的消耗。

ios考试题及答案

ios考试题及答案

ios考试题及答案1. 以下哪个是iOS开发中使用的编程语言?A. JavaB. SwiftC. PythonD. C++答案:B. Swift2. iOS应用程序的主线程被称为什么?A. 子线程B. 后台线程C. 主线程D. 网络线程答案:C. 主线程3. 在iOS开发中,哪个框架用于处理图形和动画?A. UIKitB. Core AnimationC. Core DataD. Core Location答案:B. Core Animation4. 在iOS中,哪个类是所有视图控制器的基类?A. UIViewB. UIViewControllerC. UINavigationControllerD. UITabBarController答案:B. UIViewController5. 以下哪个是iOS开发中用于网络请求的框架?A. URLSessionB. AlamofireC. AFNetworkingD. All of the above答案:D. All of the above6. 在iOS中,哪个属性用于控制视图的可见性?A. hiddenB. alphaC. visibleD. opacity答案:A. hidden7. iOS开发中,哪个方法用于在视图控制器中加载视图?A. viewDidLoad()B. viewWillAppear()C. viewDidAppear()D. viewWillDisappear()答案:A. viewDidLoad()8. 在iOS中,哪个框架用于处理音频和视频的播放?A. AVFoundationB. MediaPlayerC. CoreAudioD. AVKit答案:A. AVFoundation9. 在iOS开发中,哪个属性用于控制按钮的点击事件?A. actionB. targetC. selectorD. All of the above答案:D. All of the above10. 在iOS中,哪个方法用于在视图控制器中处理内存警告?A. didReceiveMemoryWarning()B. didReceiveMemoryWarning()C. didReceiveMemoryWarningD. didReceiveMemoryWarningWarning答案:A. didReceiveMemoryWarning()。

苹果公司面试笔试.doc

苹果公司面试笔试.doc

苹果公司面试笔试1.桌子上放着一部老款iPhone,你所了解的iPhone使用的材料有哪些?面试职位:产品设计工程师苹果产品设计工程师的重要任务之一就是控制供给本钱,以降低手机的价格。

苹果的手机定价非常具有竞争力,因此面试者必须懂得如何在特定本钱区间内设计产品。

懂得材料及其性质能够帮助设计师在维持低本钱的同时设计出更好的产品。

2.形容一下你平时使用苹果产品的情况?面试职位:销售如果你想销售苹果的产品,你最好已经是苹果产品的用户。

不用说,苹果当然不会雇佣一个从来没有使用过iPhone的人做销售。

3.如果有500台洗衣机被测试实验室认定为不合格,你如何找出不合格的原因以及解决方法?面试职位:产品质量工程师如果制造过程中出现任何故障,你可能会失去价值数相当于百台iPhone的收入——这个数字也有可能是数万台或数十万台。

如果你想担任产品质量工程师,那么请首先确认,不管出现什么问题,你都能发现故障并找出原因所在。

尤其是当问题出现在供给链早期的时候,这一点更加重要。

4.在极其有限的资源环境下,如何在user-space框架下实现处理网络、文件系统、UI系统等的线程模型?面试职位:软件工程师编写一组代码并使之运行非常容易,但要让它高效率运行却很难。

尤其是如果你在为一款手机设计软件。

你必须使用低功耗的芯片,以维持较长的续航时间。

5.你如何计算出中国供给给美国的苹果的数量?面试职位:材料工程经理面试官所指的是苹果。

你懂的,一种水果。

但这仍然是一道相当根底的供给链题目。

如果你要担任供给链管理职位,你需要清楚地知道供给商有哪些,他们能提供的材料有哪些。

苹果优势的一个重要就是,他们买断了制造智能手机所需的所有最好的零部件。

如果你对整个供给链都了如指掌,你就能降低本钱。

苹果面试时的15道趣味考题

苹果面试时的15道趣味考题

江苏人才求职,企业招聘首选网站苹果面试时的15道趣味考题据外国媒体报道,谷歌在招聘员工和工程师时,往往会问求职者有关技术方面的问题。

苹果却大不相同,总是会司会问一些脑筋急转弯风格的问题,提出一些与硬件规格相关的问题,此举似乎更多的是希望从潜在的员工身上挖掘更多的创造力。

苹果的这些问题不仅针对技术人员,甚至还针对销售人员和其他特殊人员。

以下就是美国网站提供的苹果在面试应聘人员的最有趣味性的15道题目:1、桌上放置了一部旧iPhone,你能看到哪些材料?职位:产品设计工程师。

在苹果公司工作的多数员工,都会了解供应链的成本事务,以确保尽可能地减少生产手机的产品成本。

苹果手机是极具价格竞争优势的产品,所以你必须知道如何从事控制成本相关的工作。

因此,具备专业的材料及其属性相关的经验将有助于你在生产手机设备时降低成本。

2、描述使用苹果产品的情况职位:销售员。

如果你想销售苹果产品,最好已经是苹果用户。

无论如何,苹果不会聘用一个从未使用苹果手机的人来担任公司的销售员工。

3、如果测试部门否决了500台洗衣机,那么你将如何查找根源并找到解决之道?职位:产品质量工程师。

如果在生产中发生了故障,就可能会导致数百部i 手机受损,甚至也可能会此起成千上万的收入受损。

如果你想管理产品质量,那么就必须确保你能够发现所有产生的问题,特别是那些在供应链初期阶段就出现的问题。

4、你如何在资源非常有限的环境下将处理网络、文件系统、用户界面系统等的线程模型转化成用户空间框架?职位:软件工程师。

编写运营程序的代码较为容易,但是要让它有效的工作就会很难了,特别是当你为手机设计软件时,你必须依赖低功率的芯片来确保电池寿命延长。

5、你如何计算来自中国的苹果供应量?职位:材料项目经理。

江苏人才求职,企业招聘首选网站他们正在探讨字面意义上的苹果,如你所知,就是水果。

不过,这也是一道非常基础的供应问题。

如果你负责管理供应链,那么你就需要确切的知道供应商供应何种产品、以及能够提供什么样的材料。

苹果奇葩面试题目及答案(3篇)

苹果奇葩面试题目及答案(3篇)

第1篇苹果公司,作为全球最具创新精神和影响力的科技公司之一,其面试过程也因其独特性和挑战性而闻名。

以下是一些苹果公司在面试过程中可能出现的奇葩题目,以及对应的答案解析,供求职者参考。

一、苹果奇葩面试题目1. 你面前有两扇门,其中一扇门内藏着宝藏,但如果你不小心闯入另一扇门,只能痛苦地慢慢死掉。

这两扇门后面有两个人,这两个人都知道哪扇门后有宝藏,哪扇门擅闯者死,而这两个人呢,一个人只说真话,一个人只说假话。

谁说真话谁说假话?那就要看你有没有智慧自己找出来了,游戏规则是,你只能问这两个人每人一个问题。

那么,你问什么问题?问哪个人?根据他们的回答,你又该怎么做?答案解析:随便问其中一个人:“如果我问另一个人,他会跟我说哪扇门后是宝藏?”- 如果你问的恰好是讲真话的那个人,那他指给你的答案就是那扇通向死亡的门,因为他会诚实地告诉你那个说谎的人会怎么说。

- 如果你问的是那个只说谎话的,你得到的也是错误的答案,因为另一个人是讲真话的,说谎话的人会告诉你与讲真话的人相反的答案。

- 所以你只要随便问一个人上述问题,然后选择与他们说的相反的门就行了。

2. 帝国大厦有多重?答案解析:这个问题看似简单,实则考验面试者的应变能力和逻辑思维。

正确的答案并不是直接给出帝国大厦的重量,而是通过提问或调查来获取答案。

例如,可以询问建筑工人、查阅相关资料或使用科学方法进行测量。

3. 每天有多少孩子出生?答案解析:这个问题看似模糊,实则考察面试者的分析能力和数据敏感性。

正确的答案不是直接给出一个数字,而是通过查找相关数据、分析历史趋势和预测未来趋势来得出结论。

4. 怎样测试一台烤面包机?答案解析:这个问题旨在考察面试者的创新思维和解决问题的能力。

一个可能的答案是:通过观察面包机在不同温度、时间、面包片厚度和湿度条件下的烤制效果,以及通过感官判断面包的口感和色泽来测试烤面包机。

5. 秋千为什么只有前后荡,没有左右荡?答案解析:这个问题考察面试者的辩证思维和逻辑推理能力。

iOS笔试题及答案

iOS笔试题及答案

1. 什么是ARC/MRC,ARC无法管理内存的情况?答案1.ARC: 自动引用计数。

OC自动内存管理机制,2.区别于MRC需要手动管理引用计数retain或release 对引用计数+1 -1操作。

这种操作耗费精力容易出错,比如在多线程操作有时不确定哪个线程最后使用完毕,在模块化时对象被多个模块创建和使用,不能确定最后由谁去释放。

无法管理内存的情况?**1***Block或Delegate的循环引用解决的方法:掐断其中的一条强引用,使之变成弱引用,变成这样,就打破了循环引用:__weaktypeof (self) weakSelf =self;Delegate 要用weak修饰***2**NSTimer未释放在使用NSTimer addtarget 时,为了防止target 被释放而导致的程序异常,timer 会强引用target,所以这也是一处内存泄露的隐患。

解决方法是使用线程安全的MSWeakTimer,然后在dealloc中主动调用invalidate**3***非OC对象2.如何理解retain/copy/assign/release/autor release/dealloc 关键字?答案copy:建立一个索引计数为1的对象,然后释放旧对象,主要用于nsstring;retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1对其他NSObject和其子类assign: 简单赋值,不更改索引计数release:手动释放对象;dealloc:它的作用是,当对象的引用计数为0,系统会自动调用dealloc方法,回收内存。

autorelease 原理:a.先建立一个autorelease poolb.对象从这个autorelease pool里面生成。

c.对象生成之后调用autorelease函数,这个函数的作用仅仅是在autorelease pool中做个标记,让pool记得将来release一下这个对象。

ios笔试题及答案

ios笔试题及答案

IOS笔试题及答案1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么?(8分)答:Object-c的类不可以多重继承;可以实现多个接口,通过实现多个接口可以完成C++的多重继承;Category是类别,一般情况用分类好,用Category 去重写类的方法,仅对本Category有效,不会影响到其他类与原有类的关系。

2. #import 跟#include 又什么区别,@class呢, #import<> 跟#import””又什么区别?(8分)答:#import是Objective-C导入头文件的关键字,#include是C/C++导入头文件的关键字,使用#import头文件会自动只导入一次,不会重复导入,相当于#include和#pragma once;@class告诉编译器某个类的声明,当执行时,才去查看类的实现文件,可以解决头文件的相互包含;#import<>用来包含系统的头文件,#import””用来包含用户头文件。

3. 属性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作用,在那种情况下用?(8分)1. readwrite 是可读可写特性;需要生成getter方法和setter方法时2. readonly 是只读特性只会生成getter方法不会生成setter方法;不希望属性在类外改变3. assign 是赋值特性,setter方法将传入参数赋值给实例变量;仅设置变量时;4. retain 表示持有特性,setter方法将传入参数先保留,再赋值,传入参数的retaincount会+1;5. copy 表示赋值特性,setter方法将传入对象复制一份;需要完全一份新的变量时。

6. nonatomic 非原子操作,决定编译器生成的setter getter是否是原子操作,atomic表示多线程安全,一般使用nonatomic4.写一个setter方法用于完成@property (nonatomic,retain)NSString *name,写一个setter方法用于完成@property(nonatomic,copy)NSString *name(8分)- (void) setName:(NSString*) str{[str retain];[name release];name = str;}- (void)setName:(NSString *)str{id t = [str copy];[name release];name = t;}5.对于语句NSString*obj = [[NSData alloc] init]; obj在编译时和运行时分别时什么类型的对象?(8分)编译时是NSString的类型;运行时是NSData类型的对象6.常见的object-c的数据类型有那些,和C的基本数据类型有什么区别?(8分)object-c的数据类型有NSString,NSNumber,NSArray,NSMutableArray,NSData等等,这些都是class,创建后便是对象,而C语言的基本数据类型int,只是一定字节的内存空间,用于存放数值;NSInteger是基本数据类型,并不是NSNumber的子类,当然也不是NSObject的子类。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

苹果公司在招聘员工时,会向求职者问一些“可汗学院”(Khan Academy)提出的考验智商的谜题。

你可能没听说过“可汗学院”,但“可汗学院”的谜题被苹果采用一定是有其道理的。

可汗学院由孟加拉裔美国人萨尔曼•可汗(Salman Kahan)创立,是一家由谷歌和比尔&梅琳达•盖茨基金会背后支持的教育性非营利组织,主旨在于利用网络影片进行免费授课,目前已经有关于数学、历史、金融、物理、化学、生物、天文学等科目的内容。

苹果在面试过程中随时都有可能向求职者抛出这些考验智商与逻辑的问题,因此如果你向往进入苹果工作,这些艰涩的问题在面试前必须谨慎对待仔细研究,因为苹果的原则是——不能出错,哪怕你已经级别很高,是冲着苹果的高级软件工程师职位而来也不例外。

幸运的是,这些问题虽然刁钻,但却都有唯一的答案,所以你只要有备而来,还是可以应对自如的,下面是8个苹果面试过程中求职者可能遇到的问题,以及已经被各路聪明的求职者破解的答案。

问题一:“你面前有两扇门,其中一扇门内藏着宝藏,但如果你不小心闯入另一扇门,只能痛苦地慢慢死掉……”这一听就是那种经典的最令人头痛的一类问题,但其实与其他问题相比,这只是个热身。

在这两扇门后面,有两个人,这两个人都知道哪扇门后有宝藏,哪扇门擅闯者死,而这两个人呢,一个人只说真话,一个人只说假话。

谁说真话谁说假话?那就要看你有没有智慧自己找出来了,游戏规则是,你只能问这两个人每人一个问题。

那么,你问什么问题?问哪个人?根据他们的回答,你又该怎么做?问题二:“你前面站了5个人,他们中间只有一个人讲真话……”这个问题比上个问题难就难在,你只知道他们五个中有一个只讲真话,但其余四个,他们有时候讲真话,有时候讲假话,只有一点可以确定,这四个人将真话和假话有个规律:如果这次讲了真话,下次就会讲假话,如果这次讲假话,下次就讲真话。

你的任务是,把五个人中那个只讲真话的人找出来。

你可以问两个问题,两个问题可以向同一个人发问,也可以分别问两个人。

你该问什么问题?小提示:你可以这样安排两个问题承担的任务:首先你可以先问一个问题,不管得到的答案是什么,你都能从中知道下一个问题你将得到的答案是真是假。

问题三:“外星人打算将地球用来种蘑菇,并且已经抓了十个人类……”外星人用这十个人代表地球60亿人口,将通过外星人的方式来测试这十个人,决定地球是不是有资格加入跨星际委员会,如果没有,就把地球变成一个蘑菇农场。

明天,这十个人将被关在一间漆黑的屋子里前后排成一队,外星人将给每个人戴一顶帽子,帽子为紫色或者绿色,然后外星人会将灯打开,这十个人每个人都无法看见自己头上的帽子是什么颜色,但可以看见排在你前面的每个人头上帽子的颜色。

帽子的颜色是随机的,可能全是紫的,也可能全是绿的,或者是任意的组合。

外星人会从后往前问每一个人:“你头上的帽子是什么颜色?”如果这个人答对了,这个人就安然无事,他所代表的地球上6亿人口也将获救。

否则,这个人将被爆头,外星人将把他所代表的6亿人口变成蘑菇的肥料。

每个人的答案屋子里所有人都可以听到。

现在,人类的命运在你手上,你可以设计一个方案,使这十个人提前制定一个计划,这个计划必须拯救尽可能多的人。

提示:有个方案可以让你拯救其中至少九个人。

问题四:“100个完美的逻辑学家坐在一个房间里……”这是一个电视真人秀节目,节目里100个拥有完美无瑕逻辑思维能力的人围成一圈坐在一个房间里。

在进入房间前,这100个人被告知,100个人中至少有一个人的额头是蓝色的。

你可以看见别人额头的颜色,但无法看到自己的,你需要对自己额头是不是蓝色进行猜测,在房间的灯被关掉时,如果你推测出你的额头是蓝色的,你需要站起来离开。

然后房间的灯被再次打开,那些认为自己额头是蓝色的人已经不在屋内。

接下来灯会再次被关掉,剩下的人中推测自己额头是蓝色的离开,如此重复。

问题来了,假设这100个人的额头都是蓝色的,将会发生什么情况?注意,这100个人都有完美无瑕的逻辑推理能力,他们会根据其他人的额头颜色对自己进行合理的推理和猜测。

提示:想想看,如果100个人不全是蓝色额头,又会发生什么情况?问题五:“你有一个横6竖6的方格……”你现在在左上第一个格子里,你的任务是移动到最右下脚的格子里,你每次只能向右或者向下移动,不能斜向移动,也不能后退。

你能找出几种方法移动到最右下脚的格子?问题六:“逻辑学家们围成一圈坐着,他们的额头上面画有数字……”又来一个逻辑学家围成一圈的问题,这次是这样的,三个拥有完美逻辑推理能力的人围成一圈坐在一个房间里,每个人的额头上都画着一个大于0的数字,三个人的数字各不相同,每个人都看得见其他两个人的数字,看不见自己的。

这三个数字的情况是,其中一个数字是其他两个数字的和,已知的情况还有,其中一个逻辑学家的数字是20,一个是30。

游戏组织者从这三个逻辑学家后面走过,并问三个人各自额头上的数字是什么。

但第一轮每个逻辑学家都回答他们无法推测自己的数字是什么。

游戏组织者只好进行第二轮的发问,这是为什么?你能据此猜出三个逻辑学家的数字吗?问题七:“你面前有一百个灯泡,排成一排……”一百个灯泡排成一排,第一轮你把他们全都打开亮着,然后第二轮,你每隔一个灯泡关掉一个,这样所有排在偶数的灯泡都被关掉了。

然后第三轮,你每隔两个灯泡,将开着的灯泡关掉,关掉的灯泡打开(也就是说将所有排在3的倍数的灯泡的开关状态改变)。

以此类推,你将所有排在4的倍数的灯泡的开关状态改变,然后将排在5的倍数的灯泡开关状态改变……第100轮的时候,还有几盏灯泡亮着?提示:如果你是第n轮(n大于1小于100),排在n的倍数位置的灯泡的开关状态就发生转变。

反过来,比如第8个灯泡,当你在8的因子轮(即第1,2,4和8轮)的时候,它就会改变开关状态。

所以对于第m个灯泡,如果m有奇数个因子,你的开关状态就发生奇数次变化。

问题八:“你有一个立方体,立方体的边长是3……”这个问题比前面那个从左上格子走到右下格子的问题难,因为那毕竟是个平面问题。

如图所示,这次的任务是从立方体的背面左上的小立方体走到完全相对的正面右下小立方体。

你可以往上移,也可以往下移,还可以往前移。

You can move toward the front, you can move down, or you can move upward。

问题还是,你共有几种走法?求职者的最佳答案:1、随便问其中一个人:“如果我问另一个人,他会跟我说哪扇门后是宝藏?如果你问的恰好是讲真话的那个人,那他指给你的答案就是那扇通向死亡的门,因为他会诚实地告诉你那个说谎的人会怎么说。

如果你问的是那个只说谎话的,你得到的也是错误的答案,因为另一个人是讲真话的,说谎话的人会告诉你与讲真话的人相反的答案。

所以你只要随便问一个人上述问题,然后选择与他们说的相反的门就行了。

2、随便找一个人,首先问:“你是那个只讲真话的吗?”如果答案是肯定的,你再问这个人:“谁是只讲真话的?”;如果第一个问题你得到的答案是否定的,你就再问对方“谁不是只讲真话的?”正如这个问题给出的提示,第一个问题的价值在于,如果你得到的答案是“我是”,那么你问的人要么是那个只讲真话的,要么是那个这一轮讲假话的“半真话半假话”者,不管是谁,他下一轮一定会说真话。

所以你可以继续问这个人:“谁是只讲真话的?”对方的答案就是正确答案。

如果对第一个问题你得到的答案是“我不是”,那么回答者不可能是只讲真话的那个人,只能是一个此轮讲真话的“半真话半假话”者。

此人下一轮将会说假话,所以你应该问他:“谁不是只讲真话的?”同样他告诉你的,只能是那个只讲真话的。

3、第十个人计算排在前面的所有人的绿帽子是奇数还是偶数并向前面的人发出一个信号,这样排在前面人就可以再通过排在更前面的所有人的绿帽子的奇偶数是否变化来判断自己帽子的颜色,因为如果绿帽子奇偶发生变化,那自己就是那个导致变化的“绿帽子”,如果没变化,自己就是“紫帽子”。

因为所有的人除了回答外星人的问题不能说话,所以第十个人的“信号”只能包含在自己的答案里,比如如果排在前面的九个人有奇数顶绿帽子,这个人类就告诉外星人自己的帽子是“绿色”,如果是偶数,就猜自己的帽子是“紫色”。

这样等于给他前面的人一个暗号,排在他前面的这个人,可以通过计算自己前面的所有人的绿帽子的奇偶变化来判断自己的帽子是绿还是紫。

排在最后的那个人为了大众利益没有选择,根据前面的人的帽子情况告诉外星人自己是“绿帽子”还是“紫帽子”,他的答案有1/2的几率正确,但他前面的人一定都能答对。

还没懂?比如第十个人看到前面有奇数个绿帽子,他就告诉外星人自己的是绿色,这是他前面的人就知道他的意思是前面九个人中有奇数个绿帽子,这是第九个人再数前面八个人的,如果前面八个人中也有奇数个,那自己就是紫色帽子。

第九个人告诉外星人自己是紫色帽子,第八个人就知道绿帽子没有减少还是奇数个,再数数前面七个人绿帽子数的奇偶,就可以判断自己帽子的颜色;反之,如果第九个人告诉外星人自己是绿色帽子,那第八个人就应该知道绿色帽子减少了一个由奇数变成了偶数,再看看前面所有的绿帽子情况作出判断。

这样一个接一个,只要每个人都认真听后面的人的答案并在心里计算所剩绿帽子的奇偶变化,前面九个人都能获救。

当然,你也可以计算紫色帽子的奇偶。

4、将会出现的情况是:灯关了又开,开了又关,重复到第一百次时,所有人都同时离开。

这是为什么呢?想想看,每个人都看见其他99个人额头是蓝色的,灯关掉后再打开,发现这99个蓝色额头的同伴都没有离开,然后灯再次关掉后打开,如此重复100遍后,所有人同时离开了房间。

这么理解吧,假设只有一个人的额头是蓝色的,由于这100个人事先被告知至少有一个人额头是蓝色,所以这个人如果看到其他99个人额头都不是蓝色,立马就知道自己是蓝色,所以灯一关掉,这个人就会离开房间。

如果有两个人额头是蓝色呢?其中一个蓝色额头的人会想:我的额头可能是蓝色也可能不是蓝色,现在其他99个人中有一个蓝色额头的人,如果我不是蓝色,那么就只有这一个人是,那么他看到我们都不是蓝色额头就能推断出他是,那么灯一关他就会离开,我先等一下,灯再打开如果他已经走了,那就证明我的额头不是蓝色的。

反之,如果我的额头是蓝色的,那个蓝色额头的人的想法会和我刚才的想法一样先等一等,第一次关灯他不会离开,这样如果灯开了那个蓝色额头的人还在,就证明我的额头也是蓝色的。

这样第二次关灯我们俩会一起离开。

以此类推,如果有三个人额头是蓝色,你看到另外两个人额头是蓝色,应该推算出如果自己的额头不是蓝色的话,那么灯第二次关的时候他们俩会同时离开,如果他们俩没有同时离开,那就证明我的额头是蓝色的,我应该在第三次关灯的时候离开。

结果是,三个蓝色额头的人在第三次关灯的时候同时离开。

相关文档
最新文档