第一题
输入某年某月某日,判断这一天是这一年的第几天?
years = int(input("请输入年份:"))
months = int(input("请输入月份:"))
days = int(input("请输入日期:"))
def y_num_years(years):
"""判断是否为闰年"""
if years % 400 == 0 or ( years % 4 == 0 and years % 100 != 0):
return True
return False
monthss = (0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334)
def d_num_days(months, days):
if (0 < months <= 12):
days_num = monthss[months - 1] + days
else:
print("请输入正确月份!")
if months > 2:
if y_num_years(years):
return days_num + 1
return days_num
days_nums = d_num_days(months, days)
print(f"这是 {years} 年的第 {days_nums} 天")
# 结果输出
请输入年份:2030
请输入月份:03
请输入日期:30
这是 2030 年的第 89 天
第二题
打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
sums = []
for i in range(100, 1000):
sum_a = i % 10
sum_b = i // 10 % 10
sum_c = i // 100
if i == (sum_a ** 3 + sum_b ** 3 + sum_c ** 3):
sums.append(i)
print(f"1000以内的水仙花数为:{sums}")
# 结果输出
1000以内的水仙花数为:[153, 370, 371, 407]
第三题
一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
# 自由落体
def free_fall(h=100, n=10):
"""自由落体反弹的高度"""
sums, height = 0, h
for i in range(1, n+1):
sums += height * 2
height /= 2
return sums - 100, height
h = float(input("请输入初始高度: "))
n = int(input("请输入反弹次数: "))
sums, height = free_fall(h, n)
print(f"第{n}次反弹的高度为:{height}")
print(f"第{n}次落地时经过了:{sums}米")
# 结果输出
请输入初始高度: 100
请输入反弹次数: 10
第10次反弹的高度为:0.09765625
第10次落地时经过了:299.609375米
第四题
有一分数序列:2/1, 3/2, 5/3, 8/5, 13/8, 21/13..求出这个数列的前20项之和。
n = int(input("请输入需要求前几项的和: "))
a, b = 2, 1
sums = 0
for i in range(1, n + 1):
ab = a / b
sums += ab
a, b = a + b, a
print(sums)
# 结果输出
请输入需要求前几项的和: 20
32.66026079864164
第五题
企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%; 20万到40万之间时,高于20万元的部分,可提成5%; 40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
profits = int(input("请输入当月的利润:"))
# 分别计算出利润10万,20万,40万,60万和100万的提成
deducts10 = 100000 * 0.1
deducts20 = deducts10 + 100000 * 0.075
deducts40 = deducts20 + 200000 * 0.05
deducts60 = deducts40 + 200000 * 0.03
deducts100 = deducts60 + 400000 * 0.015
# 计算所得的提成
if profits > 1000000:
deducts = (profits - 1000000) * 0.01 + deducts100
elif profits > 600000:
deducts = (profits - 600000) * 0.015 + deducts60
elif profits > 400000:
deducts = (profits - 400000) * 0.03 + deducts40
elif profits > 200000:
deducts = (profits - 200000) * 0.05 + deducts20
elif profits > 100000:
deducts = (profits - 100000) * 0.075 + deducts10
else:
deducts = profits * 0.1
print(f"应发放奖金总数:{deducts}元")
# 结果输出
请输入当月的利润:1673745
应发放奖金总数:46237.45元
第六题
一个整数,它加上100后是一个完全平方数,再加上268又是一个完全平方数,请问该数是多少?
分析:
已知一个整数,假设为x,满足:
-
x + 100 = m² (m是整数)
-
x + 100 + 268 = x + 368 = n² (n是整数)
因此,可以得到:n² - m² = (x+368) - (x+100) = 268
即:n² - m² = 268
平方差公式: (n-m)(n+m) = 268
设 a = n-m, b = n+m,则 a * b = 268,且a和b都是正整数(因为n>m),并且b>=a,同时由于n和m都是正整数,所以a和b同奇偶(因为n和m都是整数,所以a和b要么都是偶数,要么都是奇数,但268是偶数,所以两个因数必须都是偶数)。
另外,由于n = (a+b)/2, m = (b-a)/2,所以a和b必须都是偶数,这样才能保证n和m是整数。
因此,可以将268分解成两个正偶数的乘积,并且满足a<b(因为n>m,所以b>a),然后求出每一组a,b对应的n和m,进而得到x
import math
def find_number():
solutions = []
for i in range(1, math.isqrt(268) + 1):
if 268 % i != 0:
continue
j = 268 // i
# 必须均为偶数
if i % 2 == 0 and j % 2 == 0:
n = (i + j) // 2
m = (j - i) // 2
x = m ** 2 - 100
solutions.append(x)
return solutions
result = find_number()
print("满足条件的整数:", result)
# 结果输出
满足条件的整数: [4256]
830

被折叠的 条评论
为什么被折叠?



