python来咯!第一天一分钱,第二天两分钱,你丈母娘真会算

164 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

python来咯!第一天一分钱,第二天两分钱,你丈母娘真会算

第1天给丈母娘1分钱,第2天给2分钱,第3天是4分钱,以此类推,给前一天的2倍,给一个月就行。按30天算。 第x天给多少钱,共给多少钱,一算吓一跳

偶然看到这道题,闲着无聊就用python把他搞了一下

base = 1e-2
n = 30

sum = 0
print("*"*30,"打印账单", "*"*30)
for i in range(1, n + 1, 1):
    print("第", str(i), "天要给(单位:元): ", base)
    sum += base
    base *= 2
    
print("*"*60)
print("30天总共要给(单位:元): ", sum)

来看看你的账单,一个月也就1000个w而已 在这里插入图片描述

帮你把支出的曲线画一下

import matplotlib.pyplot as plt
base = 1e-2
n = 30

sum = 0
sum_list = []
day_list = []
for i in range(1, n + 1, 1):
    day_list.append(i)
    sum += base
    sum_list.append(sum)
    base *= 2
 
plt.plot(day_list,sum_list)
plt.rcParams["font.sans-serif"]=["SimHei"] #设置字体
plt.xlabel('第i天')
y_t = range(0, 11000000, 1000000)
plt.yticks(y_t)
plt.grid()
plt.ylabel('总共给了多少元')
plt.show()

注意,纵轴最大刻度是1.0107=10,000,0001.0*10^7元=10,000,000元 在这里插入图片描述

这个题其实由一个印度古老传说演化而来,是典型的棋盘麦粒问题。传说是这样的:

在印度有一个古老的传说:舍罕王打算奖赏国际象棋的发明人——宰相西萨·班·达依尔。国王问他想要什么,他对国王说:“陛下,请您在这张棋盘的第1个小格里,赏给我1粒米,在第2个小格里给2粒,第3小格给4粒,以后每一小格都比前一小格加一倍。请您把这样摆满棋盘上所有的64格的米粒,都赏给您的仆人吧!”
国王笑了,认为宰相太小家子气,但等他知道结果后,他就笑不出声了。 那么,宰相要求得到的米粒到底有多少呢?

我们可以算一下国王需要赏给宰相多少粒米

n = 64
sum = 0
base = 1
for i in range(1, n+1, 1):
    sum += base
    base *= 2

print('总共需要多少粒米:',sum)

运行结果:

image.png

显然给出米粒数不够直观,根据网上的说法,一公斤大约有5w粒大米,我们求一下大约需要多少公斤大米

print('总共需', sum//50000, '公斤大米')

运行结果:

image.png

补充:

368934881474191kg3.691014kg368934881474191kg\approx3.69*{{10}^{14}}kg