3.6.4 python编程解决数学问题

1、爱因斯坦的数学题
问题描述:有一条阶梯,若每步跨 2 阶,则剩最后 一 阶,若每步跨 3 阶,则最后剩 2 阶,若每步跨 5 阶,则最后剩 4 阶,若每步跨 6 阶,则最后剩 5 阶,只有每次跨 7 阶,刚好不剩,问从[1-500)整数中,有多少个数能满足条件。请用python编程解决。
问题分析:
满足条件:每步跨2阶,剩余一阶,既为这数整除2余1;i%2==1
满足条件:每步跨3阶,剩余2阶,既为这数整除3余2;i%3==2
满足条件:每步跨5阶,剩余4阶,既为这数整除5余4;i%5==4
满足条件:每步跨6阶,剩余5阶,既为这数整除6余5;i%6==5
满足条件:每步跨7阶,剩余0阶,既为这数整除7余0;i%7==0
要满足所有条件,则用逻辑与(and)连接所有上述条件。

程序如下:

for i in range(0,500):
  if i%2==1 and i%3==2 and i%5==4 and i%6==5 and i%7==0:
    print("满足条件台阶为:",i)
*
1.
运行上述程序,满足上述条件的数是(   )【多选题】
A.118
B.119
C.328
D.329
2、一汽车某时刻的里程数为 95859 ,一小时后里程表上出现了一个新的对称数(仍为五位数),问新的对称数是什么?

*
2.
运行上述程序,满足条件的数是(  )
3、舍罕王的失算:传说舍罕王打算重赏 象棋的发明人宰相西萨班达依尔。国王问他有何要求,这位聪明的大臣 “胃口”看来并不大,他跪着说:“陛下,请您在这个棋盘的第一个小 格内,赏我一粒麦子,在第二个小格内给两粒,第三个格内给四粒,按 照这样的比例关系,摆满棋盘上所有64格的麦粒。
问题描述:棋盘上有64个格子,第一个格子放 1 粒米,第二个格子放 2 粒米,第三个格子放 4 粒米,第四个格子放 8 粒米,类推,问放满棋盘需要多少粒米?用python编程求解。
程序如下:

sum = 0
for i in range (1,65):
  sum += 2 ** (i-1)    #等同于sum=sum+2**(i-1)
print(sum)

3、30个人吃饭总共花了50元,每个男人吃饭要花 3元,每个女人吃饭要花 2元,小孩花 1元,问男人女人小孩各有多少人
程序如下:
for x in range(0,17):
  for y in range(0,26):
    if 3*x+2*y+30-x-y == 50:
      print(f"男人:{x},女人:{y},小孩:{30-x-y}")


4、猴子吃桃问题:
一个猴子第一天摘下若干个桃子,当即吃了1半,还不过瘾,又多吃了1个。第二天早上吃了剩下桃子的1半,以后每天都吃前一天剩下桃子的1半零1个。到第10天早上想吃时,只剩下了1个桃子,求第一天摘了多少个桃子?

问题分析:
由于第一天的桃子并不确定,所以正序(正向)思维肯定是很麻烦的,最后一天的桃子是确定的,所以用倒序(逆向)思维,这题就非常之简单了。
前一天的桃子剩余量和后一天猴子所具有的量有关系式:
an=2*(a(n+1)+1)


程序如下:
total = 1
for day in range(9, 0, -1):
   total = (total + 1) * 2
   print(f"第{day}天的桃子数为:{total}")



5、鸡兔同笼:
《孙子算经》中就记载了这个有趣的问题:“今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?” 意思是,有若干只鸡和兔子关在同一个笼子里,从上面数有35个头,从下面数有94只脚,问:笼子中有多少只鸡?多少只兔子?

程序如下:
head=35

foot=94
for c in range(0,head+1):    #c 鸡的个数 ,r兔的个数
  r=head-c
  if c*2+r*4==foot:
    print(f"鸡有:{c}只,兔有:{r}只")
6、牛吃草问题:
已知:有一牧场,牧草每天在匀速生长,20头牛,可以吃15天,14头牛,可以吃24天,
问:28头牛可以吃几天?


解题思路:需要知道哪些内在固定条件,
固定牧场的大小(size),以及每天草生长的速度(v)。

s:代表固定牧场的大小(固定)
v:代表每天草生长的速度(固定)
t:代表可以吃多少天(变化)
n:代表需要多少只牛可以在t时间内吃完草(变化)

由上式可得:
s+v*t1=n1*t1  ----------(1)
s+v*t2=n2*t2  ----------(2)
(1)-(2)得:  v(t1-t2)=n1t1-n2t2    
                        v=(n1t1-n2t2)/(t1-t2)
                        s=n1t1-vt1

程序如下:
n1,t1,n2,t2=20,15,14,24   #赋已知初值

v=abs(n1*t1-n2*t2)/abs(t1-t2)
s=n1*t1-v*t1
n=28
t=s/(n-v)
print(f'{n}头牛吃完需要{t}时间')
7、递归应用:
说简单点就是:一种计算过程,如果其中每一步都要用到前一步或前几步的结果,称为递归。用递归过程定义的函数,称为递归函数
注意:递归函数需要一个结束条件,即(出口),递归函数不能无限调用。


递归代码有哪些特点呢?

第一点:必须有一个函数;

第二点:函数体内要自己调用自己;

第三点:递归必须要有度,要不会一直调用陷入死循环,一般使用if进行条件判断;

第四点:到达一定度后必须要返回一个东西,也就是满足以上说的if条件开始返回;

递归例1:求5的阶乘


例2:递归实现著名的斐波那契数列:1,1,2,3,5,8,13,21,34,55,89...这个数列从第3项开始,每一项都等于前两项之和。输出该数列前20项数据。
通项写成如下形式:

程序如下:
例3、递归案例 ----- 计算数字累加
需求:
1)、定义一个函数 sum_numbers;
2 )、 能够接收一个 nums 的整数参数;
3)、计算 1 + 2+3 = num 的结果(方便理解,只循环调用3次);

函数调用示意图:
问卷星提供技术支持
举报