python案例——数学问题案例

目录

1、三色球

2、车速问题

3、爱因斯坦的数学题

4、舍罕王的失算

5、马克思手稿

6、换分币

7、回文数

8、水仙花数


1、三色球

问题描述:

一个口袋有12个球,3个红色,3个白的,6个黑色的,从中任意取8个,问共有多少种可能的颜色搭配

问题分析:

设红球m个,白球n个,则黑球为8-m-n个。因此m的取值范围是[0,3], n的取值为[0,3], 黑球 8-m-n <= 6

代码设计:

#m的取值[0,3],n的取值[0,3],那么黑球的数量为 8-m-n范围<=6

num = 0
for m in range(0,4):
    for n in range(0,4):
        if 8-m-n <= 6:
            num += 1
            print(f"{num},:红球:{m},白球:{n},黑球{8-m-n}")

1,:红球:0,白球:2,黑球6
2,:红球:0,白球:3,黑球5
3,:红球:1,白球:1,黑球6
4,:红球:1,白球:2,黑球5
5,:红球:1,白球:3,黑球4
6,:红球:2,白球:0,黑球6
7,:红球:2,白球:1,黑球5
8,:红球:2,白球:2,黑球4
9,:红球:2,白球:3,黑球3
10,:红球:3,白球:0,黑球5
11,:红球:3,白球:1,黑球4
12,:红球:3,白球:2,黑球3
13,:红球:3,白球:3,黑球2

2、车速问题

问题描述:

一汽车某时刻的里程数为 95859 ,两个小时后里程表上出现了一个新的对称数(仍为五位数),问车速和数

问题分析:

由题得到仍为5位数,故首位和末尾仍是9,则找到距离最近的对称数即可。

代码设计:

for num in range(95860,100000):
    m = list(str(num))
    if m[1] == m[3] and m[0] == m[4]:
        b = int(''.join(m))
        print(f"找到{b}")
        break

    
找到95959

知识扩展:

  • python中的input(),output()函数返回的是字符串类型,因此进行数值计算的时候要转转化为数值类型、
  • 可迭代对象是一个存储了元素的容器,比如 list、元组、数列、字符串、生成器
  • . join()可以将字符串拼接成一个字符
  • map函数的原型是 map(function, iterable, …),它的返回结果是一个列表。参数iterable传的是一个可以迭代的对象,例如列表,元组,字符串这样的。在python3以后,map()的返回值已经不再是list,而是iterators, 所以想要使用,只用将 iterator(迭代器)转换成list 即可, 比如 list(map()) 
  • 若将一个数值转化为数值数组,需要首先将数值转化为字符串 str(a),然后进行list(),转化为字符数组,再用for循环转化为数值数组

3、爱因斯坦的数学题

问题描述:

有一条阶梯,若每步跨 2 阶,则剩最后 一 阶,若每步跨 3 阶,则最后剩 2 阶,若每步跨 5 阶,则最后剩 4 阶,若每步跨 6 阶,则最后剩 5 阶,只有每次跨 7 阶,最后才刚好不剩,问1-n,有多少个数能满足

代码设计:

def myfunc(n):
    num = 0
    for i in range(0,n+1):
        if i%2==1 and i%3==2 and i%5==4 and i%6==5 and i%7==0:
            print(f"台阶为:{i}")
            num += 1
    return num

while True:
    print("请输入n")
    x=int(input())
    print(f"输入的n为:{x}")
    A = myfunc(x)
    print(f"有{A}个数满足")

4、舍罕王的失算

问题描述:

棋盘上有64个格子,第一个格子放 1 粒米,第二个格子放 2 粒米,第三个格子放 4 粒米,第四个格子放 8 粒米,类推,问放满棋盘需要多少粒米

代码设计:

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

5、马克思手稿

问题描述:

有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}")

男人:0,女人:20,小孩:10
男人:1,女人:18,小孩:11
男人:2,女人:16,小孩:12
男人:3,女人:14,小孩:13
男人:4,女人:12,小孩:14
男人:5,女人:10,小孩:15
男人:6,女人:8,小孩:16
男人:7,女人:6,小孩:17
男人:8,女人:4,小孩:18
男人:9,女人:2,小孩:19
男人:10,女人:0,小孩:20

6、换分币

问题描述:

将 5 元的人民币兑换成 1元,5角,1角的硬币,共有多少种不同的兑换方案

代码设计:

n=0
for x in range(0,6):
    for y in range(0,11):
        for z in range(0,51):
            if x+0.5*y+0.1*z == 5:
                print(f"1元:{x},5角:{y},1角:{z}")
                n += 1
print(n)

7、回文数

问题描述:

打印所有不超过 n 的其平方具有对称性质的数

代码设计:

for i in range(1,257):
    num=0
    a = str(i)
    b = len(str(i))
    for j in range(1,i):
        if j**2==i:
            for z in range(0,b):
                if a[z]==a[b-1-z]:
                    num += 1
                    if z == b-1:
                        print(i)

4
9
121

8、水仙花数

问题描述:

三位数,各位数的立方和等于本身

代码设计:

for i in range(100,1000):
    a = list(str(i))
    for j in range(0,len(a)):
        a[j] = int(a[j])
    if a[0]**3 + a[1]**3 + a[2]**3 == i:
        print(i)
153
370
371
407

  • 1
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值