问题:
昨天,我早上8点爬山,晚上8点到山顶。睡了一觉后,今天,我早上8点从山顶原路下山,晚上8点到山脚。请问,有没有一个时刻,昨天和今天,我站在同样位置?
答案见底部
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|/
分析:
你可以把这道题转换成这样的一道题:你和另一个人,一个从山顶往下走,一个从山脚往上走,走的是同一条路,是不是一定会相遇?
这个”转换思维”有什么用处呢?
就是用”其实就是”这四个字,看透问题,然后找到解决方案。
顾客吃完饭结账,200元。服务员说,”对了,我们今天有个充值免单活动。您只要充值1000元,这顿饭就可以免单,很划算呢”。全额免单?这是莫大的优惠啊!你可能充了1000元。
但是,如果有”转换思维”,你就会想到,这”其实就是”花1000元买1200元的东西。相当于打了83折。
来源: 刘润老师的微信公众号
问题:
上海有多少辆自行车?
答案见底部
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|/
分析:
这道题考的是”系统思维”。也就是你理解一个系统、事物之间的关联的能力。
这道题其实是没有标准答案的,我在这给你提供几种思路。
比如,你可以先查一下上海一共有多少人口,接下来你可以估算一下,这些人口当中有多大比例是骑自行车的?比如可能20-60岁之间,工作的人会骑自行车,通过比例你可以估算出有多少自行车。
你还可以大致算一下上海有多少条街道,每条街道大致能容纳多少辆自行车,这样也能得出一个相对准确的数字。
甚至在以前,自行车挂车牌的时候,有的人会说,我去街上随机拦几十辆自行车,算出这几十辆自行车车牌数字的中位数,通过这个中位数,我也能算出上海市一共发放了多少车牌。
当然,这些都是思路,而且也并非是完美的思路。这就对了。因为只有没有标准答案,我才能测试你的思路,测试你发现自行车和人群、自行车和街道、自行车和车牌或者和这个生态中其他因素的关系的能力,也就是建立模型,构建系统的能力。
当你建立模型,构建系统的能力越接近现实世界,你的”系统思维”能力就越强。
来源: 刘润老师的微信公众号
问题:
n的阶乘的末尾有几个零?
n = 1, result = 1, 末尾没有一个零
n = 2, result = 2 * 1 = 2, 末尾没有一个零
n = 3, result = 3 * 2 * 1 = 6, 末尾没有一个零
n = 4, result = 4 * 3 * 2 * 1 = 24, 末尾没有一个零
n = 5, result = 5 * 4 * 3 * 2 * 1 = 120, 末尾有 1 个零
n = 6, ....
分析:
如果直接计算出 n! 的大小,那么很快就会溢出。
如果每一步计算之后,把末尾的零去掉,再做计算,也会很快溢出,因为这个数字也许末尾本来就没有几个零。
思考末尾的零是怎么来的?
末尾的零其实是由 5 * 2 = 10 来的。那么零的个数就是由 5 的个数和 2 的个数决定的。
因为 2 的个数一定比 5 的个数多,所以零的个数就是由 5 的个数决定的。
那么只需要计算出 n! 中每个数的因子中 5 的个数,就是零的个数。
那么还可以优化吗?
5 10 15 20 25 30 35 40 …. 125 … 625 …
5^1 ….. 5^2 …………. 5^3 … 5^4 …
在 5^1 -> 5^2 这个区间内,5 的个数都是 1 个。 在 5^2 -> 5^3 这个区间内,5 的个数都是 2 个。 在 5^3 -> 5^4 这个区间内,5 的个数都是 3 个。
package main
import "fmt"
type newInt int // This is a new type.
type myInt = int // This is just a alias name.
func main() {
var a newInt
var b myInt
var c int
fmt.Printf("a = %v, type = %T\n", a, a)
fmt.Printf("b = %v, type = %T\n", b, b)
fmt.Printf("c = %v, type = %T\n", c, c)
// c = a // cannot use a (type newInt) as type int in assignment
c = int(a) //valid
c = b //valid
}
a = 0, type = main.newInt
b = 0, type = int
c = 0, type = int
问题:
有三个连续的,大于六的整数,已知其中两个是质数,求证第三个数能被 6 整除。
答案见底部
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|/
分析:
质数:就是只能被 1 和这个数字本身整除的数。
你要先把被 6 整除这个问题,分解成同时能被 2 整除,也能被 3 整除。
那么,我们知道,任意连续的两个整数中间一定有一个数是 2 的倍数,也就是能被 2 整除。同时我们还知道,任意三个数中间一定有一个数是 3 的倍数,也就是能被 3 整除。
这也就是说,这连续的 3 个整数里面,一定有一个数可以被 2 整数,还有一个数可以被 3 整数。
但是题目告诉我们,题中的三个整数,有两个数是质数,也就是只能被 1 和这个数本身整除,而这三个数还都大于 6,不可能是 2 和 3。
所以,这三个数里能被 2 整除的数和能被 3 整除的数,只能是同一个数,也就是这两个质数之外的第三个数。
来源: 刘润老师的微信公众号
问题:
国王有 50 桶酒,有一桶被下毒了,喝了有毒的酒会在 15 分钟后死亡。因为国王在 2 个小时之后就要用这些好酒来招待客人了,所以要在 2 个小时之内找出这桶有毒的酒。于是国王决定用死囚来试酒。那么最少要用几个死囚才能找出这桶有毒的酒?
答案见底部
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|/
答案:2 个。
分析:
2 小时 / 15 分钟 = 8,所以一共有 8 份的时间。
那么可以把 50 桶酒分为 8 份。
第 1 份 | 第 2 份 | 第 3 份 | 第 4 份 | 第 5 份 | 第 6 份 | 第 7 份 | 第 8 份 |
6 桶酒 | 6 桶酒 | 6 桶酒 | 6 桶酒 | 6 桶酒 | 6 桶酒 | 7 桶酒 | 7 桶酒 |
A1 | B1 | C1 | D1 | E1 | F1 | G1 | H1 |
A2 | B2 | C2 | D2 | E2 | F2 | G2 | H2 |
A3 | B3 | C3 | D3 | E3 | F3 | G3 | H3 |
A4 | B4 | C4 | D4 | E4 | F4 | G4 | H4 |
A5 | B5 | C5 | D5 | E5 | F5 | G5 | H5 |
A6 | B6 | C6 | D6 | E6 | F6 | G6 | H6 |
第 1 份有 6 桶酒。第 2 份有 6 桶酒。。。
找 2 个死囚 A 和 B。
A 每隔 15 分钟喝一份酒。就是第一个 15 分钟喝 A1、A2、A3、A4、A5、A6,第二个 15 分钟喝 B1、B2、B3、B4、B5、B6。
B 每隔 15 分钟喝每一份酒的第 X 桶。就是第一个 15 分钟喝 A1、B1、C1、D1、E1、F1、G1、H1,第二个 15 分钟喝 A2、B2、C2、D2、E2、F2、G2、H2。
就是一个人横着喝,另一个人竖着喝。
最后的交叉点就是有毒的那桶酒。