网站首页 > 基础教程 正文
今天用Python讲数学题
题一
有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
解题思路:先组成所有的排列,再筛选出满足要求的数。
程序源代码:
arr=[]
for i in range(1, 5):
for j in range(1, 5):
for k in range(1, 5):
if (i != k) and (i != j) and (j != k):
s=i*100+j*10+k
arr.append(s)
print(arr)
print(len(arr))
运行结果为:
[123, 124, 132, 134, 142, 143, 213, 214, 231, 234, 241, 243, 312, 314, 321, 324, 341, 342, 412, 413, 421, 423, 431, 432]
24
题二
一个整数,它加上100和加上268后都是一个完全平方数,请问该数是多少?
解题思路:假设在10000以内判断,将该数加上100后再开方,加上268后再开方,如果开方后的结果满足如下条件,即是结果。
程序源代码:
import math
for i in range(10000):
x = int(math.sqrt(i + 100)) #注意一定要int转化为整型值
y = int(math.sqrt(i + 268))
if(x * x == i + 100) and (y * y == i + 268):
print (i)
运行结果为:
21
261
1581
题三
输入某年某月某日,判断这一天是这一年的第几天?
解题思路:以3月10日为例,应该先把前两个月的天数加起来,然后再加上10天即本年的第几天;闰年且输入月份大于3时需考虑多加一天。
程序源代码:
year = int(input('year:\n'))
month = int(input('month:\n'))
day = int(input('day:\n'))
months = (0,31,59,90,120,151,181,212,243,273,304,334)
if 0 < month <= 12:
sum = months[month - 1]
else:
print ('data error')
sum += day
leap = 0
if (year % 400 == 0) or ((year % 4 == 0) and (year % 100 != 0)):
leap = 1
if (leap == 1) and (month > 2):
sum += 1
print ('it is the %dth day.' % sum)
运行结果为:
year:
2023
month:
3
day:
10
it is the 69th day.
题四
打印出所有的"水仙花数"("水仙花数"是指一个三位数,其各位数字立方和等于该数本身)
解题思路:利用for循环控制100-999个数,每个数解析出个位,十位,百位,再判断是否满足等式。
程序源代码:
for n in range(100,1000):
i = n // 100
j = int(n / 10 % 10)
k = n % 10
# print(i, j, k, sep='|')
if n == i ** 3 + j ** 3 + k ** 3:
print(n)
运行结果为:
153
370
371
407
题五
将一个正整数分解质因数。如:输入100,打印出90=2*2*5*5
解题思路:
对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可;
(2)如果n>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步;
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
程序源代码:
from sys import stdout
n = int(input("input number:\n"))
print ("n = %d" % n)
for i in range(2,n + 1):
while n != i:
if n % i == 0:
stdout.write(str(i))
stdout.write("*")
n = n / i
else:
break
print ("%d" % n)
运行结果为:
input number:
100
n = 100
2*2*5*5
题六
求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字
解题思路:例如2+22+222+2222+22222(此时共有5个数相加);几个数相加可以由键盘控制,每次后一个数相对于前一个数的增长规律。
程序源代码:
Tn = 0
Sn = []
n = int(input('n = :\n'))
a = int(input('a = :\n'))
for count in range(n):
Tn = Tn + a
a = a * 10
Sn.append(Tn)
print (Tn)
Sn=sum(Sn)
print (Sn)
运行结果为:
n = :
5
a = :
2
2
22
222
2222
22222
24690
题七
一个数如果恰好等于它的因子之和,这个数就称为"完数",找出1000以内的完数。
解题思路:完数例如6=1+2+3。参考分解质因数的方法,再判断。
程序源代码:
from sys import stdout
for j in range(2,1001):
k = []
n = -1
s = j
for i in range(1,j):
if j % i == 0:
n += 1
s -= i
k.append(i)
if s == 0:
print(j)
for i in range(n):
stdout.write(str(k[i]))
stdout.write(' ')
print(k[n])
运行结果为:
6
1 2 3
28
1 2 4 7 14
496
1 2 4 8 16 31 62 124 248
题八
有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
解题思路:分子与分母的变化规律。
程序源代码:
a = 2.0
b = 1.0
s = 0
for n in range(1,21):
s += a / b
t = a
a = a + b
b = t
print(s)
运行结果为:
32.66026079864164
题九
利用递归方法求阶乘,如求5!
解题思路:递归思想。
程序源代码:
def fact(j):
sum = 0
if j == 0:
sum = 1
else:
sum = j * fact(j - 1)
return sum
print ('%d! = %d' % (5,fact(5)))
运行结果为:
5! = 120
- 上一篇: Python初学者练习:查找一个整数的质因数
- 下一篇: 【python】(9)迭代与生成器
猜你喜欢
- 2024-12-13 人教版小学六年级数学下册期末试卷9
- 2024-12-13 Python的for语句与C或Pascal的区别
- 2024-12-13 截尾法判断整除——同余定理的应用
- 2024-12-13 有哪些好玩的 Python 代码?
- 2024-12-13 爆肝整理!大牛总结出的13道经典Python面试题,你都会吗?
- 2024-12-13 记住这份软件测试八股文还怕不能拿offer?你值得拥有
- 2024-12-13 如何在你的项目中混合 Rust 和 Python
- 2024-12-13 过瘾!100道Python入门练习题
- 2024-12-13 2020-09-20:如何判断一个数是质数?
- 2024-12-13 【python】(9)迭代与生成器
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)