问题:
上海有多少辆自行车?
答案见底部
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|/
分析:
这道题考的是”系统思维”。也就是你理解一个系统、事物之间的关联的能力。
这道题其实是没有标准答案的,我在这给你提供几种思路。
比如,你可以先查一下上海一共有多少人口,接下来你可以估算一下,这些人口当中有多大比例是骑自行车的?比如可能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。
就是一个人横着喝,另一个人竖着喝。
最后的交叉点就是有毒的那桶酒。
问题:
假定有二十五名短跑选手比赛竞争金银铜牌,赛场上有五条赛道,因此一次可以有五个人同时比赛。比赛并不计时,只看相应的名次。假如选手的发挥是稳定的,也就是说如果约翰比张三跑得快,张三比凯利跑得快,那么约翰一定比凯利跑得快。最少需要几组比赛才能决出前三名?
答案见底部
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|/
答案:7次。
分析:
一、 将 25 名选手分为五个组,每组五个人,为了便于说明,我们不妨把这 25 个人根据所在的组进行编号,A1-A5 在 A 组,B1-B5 在 B 组….最后 E1-E5 在最后的 E 组。
然后让每个组分别比赛,排出各组的名次来。不失一般性,我们假设他们的名次就是他们在小组中的编号,即 A 组的名次是 A1、A2、A3、A4、A5,B 组和其它组的名次也是类似(如下图):
A组 | B组 | C组 | D组 | E组 |
A1 | B1 | C1 | D1 | E1 |
A2 | B2 | C2 | D2 | E2 |
A3 | B3 | C3 | D3 | E3 |
A4 | B4 | C4 | D4 | E4 |
A5 | B5 | C5 | D5 | E5 |
二、 让各组的第一名,也就是 A1、B1、C1、D1、E1 再比一次,这样就能决出第一名。不是一般性,我们假设 A1 在这次比赛中获胜,这样我们就知道了第一名。
三、 由于 A1 是第一名,那么第二名和第三名呢?我们假设在第二步中,也就是第 6 组比赛中,名次为 A1、B1、C1、D1、E1 。那么很明显,D1 和 E1 就已经失去了竞争前 3 名的资格了。
四、 第二名的候选人就是比 A1 慢的人,比其他人都快的人,就只能是 A2 和 B1 了。
五、 第三名的候选人就是刚好比第二名慢的人,就只能是 A3、B2、C1 了。
六、 那第二名的候选人和第三名的候选人加起来一共 5 个人,刚好一组比赛。
来源: 吴军老师的得到课程