python 常见数学题

1-水仙花数
题目:水仙花数是指一个三位数,
其各位数字3次幂和等于该数本身。
例如:153=1^3+5^3+3^3。

for i in range(100, 1000):
    x = i // 100
    y = i // 10 % 10
    z = i % 10
    if x ** 3 + y ** 3 + z ** 3 ==i:
        print(i)
2-玫瑰花数
题目:玫瑰花数是指一个四位数,
其各位数字4次幂和等于该数本身。
例如:1634=1^4+6^4+3^4+4^4。

for i in range(1000, 10000):
    a = i // 1000
    b = i % 1000 // 100
    c = i % 100 // 10
    d = i % 10
    if a ** 4 + b ** 4 + c ** 4 + d ** 4 == i:
        print(i)
3-马匹驮货
题目:100匹马驮100担货,大马一匹驮3担,
中马一匹驮2担,小马两匹驮1担,
计算大、中、小马各有多少组合?

for x in range(1, 100):
    for y in range(1, 100):
        z = 100 - x - y
        if 3 * x + 2 * y + z / 2 == 100:
            print(x, y, z)
4-神秘数字
题目:请你找出200-300之间的三位数,各位之积为42,各位之和为12的神秘数字是多少?

for i in range(200, 300):
    x = x = i // 100
    y = y = i // 10 % 10
    z = z = i % 10
    if x * y * z == 42 and x + y + z == 12:
        print(i)
5-卡普雷卡
题目:数学家卡普雷卡偶然发现铁路旁的里程碑“3025”被雷击得一分为二:
变成30与25,他敏锐地注意到:(30+25)^2=3025。请你找出10000以内的四位卡普雷卡数。

for i in range(1000, 10000):
    a = int(str(i)[:2])
    b = int(str(i)[2:])
    if (a + b) ** 2 == i:
        print(i)
6-幸运盒子
题目:一个同学抽了一个幸运数字宝盒,工作人员给出了如下提示:
是100以内的奇数、能被7整除、十位数字是个位数字的2倍
编程求这个数字可能是多少?

for i in range(1, 100):
    if i % 2 == 1 and i % 7 == 0 and (i // 10) / (i % 10) == 2:
        print(i)
7-幸运数字
题目:请你按题目要求找出 1—1000之间的完全幸运数要求如下:
该数是6的倍数、末尾是6、左右对称。

for i in range(1, 1000):
    if i % 6 == 0 and str(i) == str(i)[::-1] and str(i)[-1] == '6':
        print(i)
8-鸡兔同笼
题目:定义一个函数实现输入鸡兔总头数(h)和总脚数f,
计算当鸡数c和兔数r,如数据不合理,输出无解。

题目解析:

"""

假设让小鸡抬起1只脚、兔子抬起2只脚 #

假设鸡 都抬起一只脚

兔子 都抬起两只脚

鸡 抬起1只脚剩1只;

兔子 抬起2只脚剩2只

那么,脚的数量就会变为原来的一半。

脚=总脚数 / 2 

这时,笼子里兔子 比鸡 的脚多1

那只要用教的数目减去头的数目

算出来的就是兔子多出来的脚

"""

def aaa(h, f):
   r = f / 2 - h   
    c = h - r
    if c == int(c) or r == int(r):
        print('鸡有{}只,兔有{}只'.format(int(c), int(r)))
    else:
        print('无解')


aaa(21, 55)
aaa(21, 66)
9-米粒棋盘
题目:在棋盘的第1格放1粒大米,第2格放2粒,第3格放4粒,
之后的每一格中的米粒数目都是相邻前一格的两倍,
一直放到最后的第64格,请你计算第64各中应放多少米?

题目解析:

"""

第一格是2^0,

第二格是2^1

第三格是2^2

……………………

第n格是2^(n-1)

"""

for i in range(64):
    x = 2 ** i
print('第64格应放米{}粒'.format(x))
10-自守数字
题目:自守数是指一个数的平方的尾数等于该数自身的自然数。
例如:6^2=36、25^2 =625、76^2=5776求1000以内的自守数。

for i in range(1,1000):
    if str(i**2)[-len(str(i)):]==str(i):
        print(i)
11-等差数和
题目:编写一个等差数列,通用式为:S=n(a1+an)/2
n为数字个数,a1为开始数字,an为结尾数字

a = int(input('请你输入开始数字是:'))
b = int(input('请你输入结尾数字是:'))
c = int(input('请你输入几个数字和:'))
s = int(c * (a + b) / 2)
print(s)
12-等比数和
题目:编写一个等比数列,通用式为:S=a1(1-q**n)/(1-q)
n为数字个数,a1为开始数字,q为公比数字(q≠1)。

a = int(input('请你输入开始数字是:'))
q = int(input('请你输入等比公比是:'))
n = int(input('请你输入几个数字和:'))
if q == 1:
    print('输入有误,q≠1')
else:
    s = int(a * (1 - q ** n) / (1 - q))
    print(s)
13-斐波那契
题目:斐波那契数列,又称黄金分割数列,
例如:1、1、2、3、5、8、13、21......,
请找出规律打印输出前20项的斐波那契数列。

方法一:
a, b = 0, 1
for i in range(20):
    a, b = b, a + b
    print(a)

方法二:
def a(x):
    if x == 1 or x == 2:
        return 1
    else:
        return a(x - 1) + a(x - 2)

for i in range(1, 21):
    print(a(i))
14-大衍数列
题目:大衍数列,来源于《乾坤谱》中对易传“大衍之数五十”的推论。
数列中的每一项,都代表太极衍生过程中,曾经经历过的两仪数量总和。
是中华传统文化中隐藏着的世界数学史上第一道数列题。
0、2、4、8、12、18、24、32、40、50......
通项式:(n*n-1)÷2 (n为奇数)、n*n÷2 (n为偶数)

a = []
for i in range(1, 11):
    if i % 2 == 1:
        a.append(int((i ** 2 - 1) / 2))
    else:
        a.append(int((i ** 2) / 2))
for i in a:
    print(i)
15-卢卡斯数
题目:卢卡斯数有很多性质和斐波那契数很相似。
如 Ln = Ln-1 + Ln-2,其中不同的是 L1 = 1、 L2 = 3。
所以卢卡斯数有:1, 3, 4, 7, 11, 18, 29, 47, 76, 123, ......
当中的平方数只有 1 和 4,
卢卡斯数列和斐波那契都是我们以后经常要用到的数列,
对于研究大盘以及个股时间上的结构有至关重要的作用。

a, b = 2, 1
for i in range(10):
    a, b = b, a + b
    print(a)
16-佩尔数列
题目:佩尔数的数列从0和1开始,从第3个数字开始每一个佩尔数都是前一项两倍再加上前二项。前10个佩尔数是:0, 1, 2, 5, 12, 29, 70, 169, 408, 985......

a, b = 1, 0
for i in range(10):
    a, b = b, 2 * b + a
    print(a)
17-帕多瓦数
题目:帕多瓦数列是由帕多瓦总结而出的。它的特点为从第四项开始,每一项都是前面2项与前面3项的和。帕多瓦数列是:1,1,1,2,2,3,4,5,7,9,12,16......

a, b, c = 0, 1, 1
for i in range(10):
    a, b, c = b, c, a + b
    print(a)
18-卡特兰数
题目:卡特兰数又称卡塔兰数,是组合数学中一个常出现在各种计数问题中的数列。
由比利时数学家欧仁·查理·卡塔兰 命名,通项式:(2n)!/((n+1)!*n!)
其前几项为 : 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862......

方法一:
import math

for i in range(10):
    a = math.factorial(i * 2)
    b = math.factorial(i + 1)
    c = math.factorial(i)
    d = int(a / (b * c))
    print(d)


方法二:
def a(n):
    x = 1
    for i in range(2, 2 * n + 1):
        x *= i
    return x

def b(n):
    y = 1
    for i in range(2, n + 2):
        y *= i
    return y

def c(n):
    z = 1
    for i in range(2, n + 1):
        z *= i
    return z

for i in range(10):
    num = int(a(i) / (b(i) * c(i)))
    print(num)
19-兴趣数字
题目:贝贝对数字中包含2、0、1、9的数字很感兴趣,求1~n中包含这几个数字之和是多少?

num_sum = 0
num = int(input('请您输入1~n的数字范围:'))
for x in range(1, num + 1):
    for y in ['2', '0', '1', '9']:
        if y in str(x):
            num_sum += x
            break
print(num_sum)
20-神秘数字Ⅰ
题目:有一个四位数,各位数字之和等于34,符合这个条件的四位数是?

num = []
for x in range(1000, 10000):
    ls = [int(y) for y in list(str(x))]
    if sum(ls) == 34:
        print(x)
21-神秘数字Ⅱ
题目:有一个四位数,个位数字与百位数字的和是12,十位数字与千位数字的和是9,
如果个位数字与百位数字互换,千位数字与十位数字互换,新数就比原数增加2376,求原数。

for i in range(1000, 10000):
    ls = list(str(i))
    if int(ls[1]) + int(ls[3]) == 12 and int(ls[0]) + int(ls[2]) == 9:
        ls[1], ls[3] = ls[3], ls[1]
        ls[0], ls[2] = ls[2], ls[0]
        num = int(''.join(ls))
        if num - i == 2376:
            print(i)
22-神秘数字Ⅲ
题目:由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成。
例如:210 x 6 = 1260   8 x 473 = 3784   27 x 81 = 2187
都符合要求。一共有多少种满足要求的算式。

num_count = 0
for x in range(1, 1000):
    for y in range(x, 1000):
        l1 = list(str(x * y))
        l2 = list(str(x) + str(y))
        l1.sort()
        l2.sort()
        num = 0
        for i in l1:
            if l2.count(i) == 1 and len(l1) == 4 and l1 == l2:
                num += 1
                if num == 4:
                    num_count += 1
                    print('第{}组 {} * {} = {} '.format(num_count, x, y, x * y))
            else:
                break
23-寻找数字
题目:203879 * 203879 = 41566646641,
仔细观察,203879 是个6位数,
它的每个数位上的数字都是不同的,
平方后的所有数位上都不出现组成它自身的数字。
具有这样特点的6位数还有一个,请你找出它。

for x in range(100000, 1000000):
    a = x ** 2
    b = 0
    for y in str(x):
        if y not in str(a) and str(x).count(y) == 1: 
            b += 1
        else:
            break
    if b == 6:
        print(x)

"""

  #Python count() 方法 | 菜鸟教程 (runoob.com)

Python count()方法

​编辑 Python 字符串


描述

Python count() 方法用于统计字符串里某个字符或子字符串出现的次数。可选参数为在字符串搜索的开始与结束位置。

语法

count()方法语法:

str.count(sub, start= 0,end=len(string))

参数

  • sub -- 搜索的子字符串
  • start -- 字符串开始搜索的位置。默认为第一个字符,第一个字符索引值为0。
  • end -- 字符串中结束搜索的位置。字符中第一个字符的索引为 0。默认为字符串的最后一个位置。

返回值

该方法返回子字符串在字符串中出现的次数。

"""
24-猜猜年龄
题目:一位年轻人年龄的3次方是个4位数、年龄的4次方是个6位数。
这10个数字正好包含了从0到9这10个数字且每个数字都恰好出现1次。
”请你推算一下,他的年龄是多少?

for x in range(1, 30):
    if len(str(x ** 3)) == 4 and len(str(x ** 4)) == 6:
        num = str(x ** 3) + str(x ** 4)
        num_count = 0
        for y in [str(i) for i in range(10)]:
            if num.count(y) == 1:
                num_count += 1
                if num_count == 10:
                    print(x)
25-计算年龄
题目:贝贝从某年开始每年都举办一次生日party,
并且每次都要吹熄与年龄相同根数的蜡烛。
现在算起来,他一共吹熄了236根蜡烛。
请你计算她从多少岁开始过生日party?
她今年几岁?

for x in range(1, 100):
    age_sum = 0
    for y in range(x, 100 - x):
        age_sum += y
        if age_sum == 236:
            start_age = x
            now_age = y
            print('贝贝从{}岁开始过生日,贝贝今年{}岁。'.format(start_age, now_age))
        elif age_sum > 236:
            break
26-对折面条
题目:一根高筋拉面,中间切一刀,可以得到2根面条。
如果先对折1次,中间切一刀,可以得到3根面条。
如果连续对折2次,中间切一刀,可以得到5根面条。
那么,连续对折10次,中间切一刀,会得到多少根面条呢?

noodles_count = 0
for i in range(1, 11):
    noodles_count = 2 ** i + 1
print('第10次对折得到{}根面条'.format(noodles_count))
27-堆垒煤球
题目:有一堆煤球,堆成三角棱锥形。具体:
第一层放1个,
第二层3个(排列成三角形),
第三层6个(排列成三角形),
第四层10个(排列成三角形),
如果一共有100层,共有多少个煤球?

floor_count = 0
sum_count = 0
for i in range(1, 101):
    floor_count += i
    sum_count += floor_count
print('第{}层需要{}个煤球,1-100层共有煤球{}个'.format(i, floor_count, sum_counvv))

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值