朋友在网上发来一个急转弯题目,题目如下:
三个人去投宿,一晚30元.三个人每人掏出了10元,凑够30元交给老板.后来老板说今天优惠只要25元就够了.拿出5元命令服务生退还给他们.服务生偷偷藏起了2元.然后.把剩下的3元钱分给了那三个人,每人分到1元.这样,一开始每人掏了10元,现在又退回1元,也就是10-1=9,每人只花了9元钱.三个人每人9元.3×9=27元加服务生藏起的2元=29元.还有一元钱去了哪里?
建议先尝试自已想想再往下看,^_^.
我是想了快10分钟没头绪,唉,一个侧明说明了只是个普通人。于时我尝试用UML的序列图还原场景:
aPersonA aPersonB aPersonC aWaiter Boss
每个人拿10块钱交给老板 10 10 10 0 30
今天优惠,只要25块钱 10 10 10 5 25
服务员藏起2块,分给每人1块 9 9 9 2 25
从这幅图看出问题了吗?所有的场景都是正确的,这里有一个我们一开始就忽略的不变式:三个人出的钱跟店里赚钱的相等,三人出了27,老板25,服务员2 ,所以不存在那一块钱.呵,有点偏题了。
UML时序图的作用应该有想法了吧,时序图是提供一个动态交互视角去观察系统,至于你能观察什么东东就取决于你了。也从一个侧面说明了UML只是帮助我们了解我们要做什么。