1.跑步训练
energy = 10000
time = 0
while energy > 600:
energy -= 300
time += 2
print(round((time + energy/600)*60))
答案为 3880
2.阶乘约数
# 首先统计出所有的质数
ls = []
for i in range(2, 101):
j = 2
for j in range(2, int(i ** 0.5) + 1):
if i % j == 0:
break
else:
ls.append(i)
# 让每个质数初始值为1
dic = {}
for i in ls:
dic[i] = 1
# 求出所有的质因数的数量
for i in range(2, 101):
for j in ls:
if j > i:
break
while i % j == 0:
i /= j
dic[j] += 1
# 最后连乘求出结果
res = 1
for i in dic.values():
res *= i
print(res)
答案为:39001250856960000
3 出栈次序
def f(n):
temp = 0
if n == 0:
temp += 1
elif n == 1:
temp += 1
elif n == 2:
temp += 2
elif n == 3:
temp += 5
else:
for i in range(0, n):
temp += f(i)*f(n-1-i)
return temp
print(f(16))
答案为35357670
4 哥德巴赫分解
def is_prime(n):
if n < 2:
return False
if n == 2:
return True
else:
for i in range(2, n):
if n % i == 0:
return False
return True
def finding(m):
for i in range(2, m//2 + 1):
if is_prime(i) and is_prime(m-i):
return min(i, m - i)
p = []
for i in range(4, 10001, 2):
p.append(finding(i))
print(max(p))
答案为173
5.图书排列
import itertools
nums = [i for i in range(10)]
n = 0
def check(ls):
for i in range(len(ls)-1):
if abs(ls[i] - ls[i-1]) == 1:
return False
return True
for num in itertools.permutations(nums, 10):
if check(num):
n += 1
print(n)
答案为479306
6.猴子分香蕉
for i in range(6, 10000):
a = i
if a%5 == 1:
a = (a-1)/5*4
if a%5 == 2:
a = (a-2)/5*4
if a%5 == 3:
a = (a-3)/5*4
if a%5 == 4:
a = (a-4)/5*4
if a%5 == 0 and a>0:
print(i) # 3141
break
答案为3141
7.稍小分数
def fun(a, b):
if b == 0:
return a
return fun(b, a % b)
N = int(input("请输入分子:"))
D = int(input("请输入分母:"))
dp = []
dq = []
for d in range(1, 101):
for n in range(1, d):
if (n/d) < (N/D) and fun(d, n) == 1:
dp.append([n, d, n/d])
dq.append(n/d)
for i in range(len(dp)):
if dp[i][2] == max(dq):
print(dp[i])
8.excel地址
n = int(input('请输入一个整数:'))
ans = []
while n!= 0:
if n % 26 == 0:
ans.append(26)
n = n // 26 - 1
else:
ans.append(n%26)
n = n // 26
for i in range(len(ans)):
#加64把数字转化成字符,且是从列表最后向前打印
print(chr(ans[len(ans)-i-1]+64), end='')
9.日期问题
while True:
try:
a = list(map(int, input().split("/")))
res = []
def isRN(year):
if year % 4 == 0 and year % 100 != 0:
return True
elif year % 400 == 0:
return True
else:
return False
def f(x, y, z): # 默认年月日
if x >= 0 and x <= 59:
x += 2000
elif x >= 60 and x <= 99:
x += 1900
if y <= 0 or y > 12:
return False
if z <= 0 or z > 31:
return False
if isRN(x) and y == 2 and z > 29:
return False
if isRN(x) == False and y == 2 and z > 28:
return False
if y == 4 and z > 30:
return False
if y == 6 and z > 30:
return False
if y == 9 and z > 30:
return False
if y == 11 and z > 30:
return False
else:
if y < 10:
y = str(0) + str(y)
if z < 10:
z = str(0) + str(z)
res.append(str(x) + "-" + str(y) + '-' + str(z))
return
f(a[0], a[1], a[2])
f(a[2], a[0], a[1])
f(a[2], a[1], a[0])
for i in sorted(list(set(res))):
print(i)
except:
break
else:
break
10.整数划分
def fun(n,a,k):
if n <= 0:
for i in range(k):
print(a[i], end='')
print()
return
for i in range(n, 0, -1):
if k > 0 and i < a[k-1]:
continue
a[k] = i
fun(n-i, a, k+1)
a = [0] * 100
fun(5, a, 0)
11.一步之遥
p = []
for i in range(10000):
for n in range(10000):
if (97*i - 127*n) == 1:
p.append(i+n)
break
print(min(p))
答案为 97
12.啦啦队问题
import math
def check():# 判断是否可以向上拓展
a = 0
b = 0
tmp = row
while tmp >0:
for i in range(1, tmp+1):
if cnt[i] == 1:
a +=1
else:
b += 1
for i in range(2, tmp+1):
if cnt[i-1]==cnt[i]:
cnt[i-1] = 1
else:
cnt[i-1] = 2
tmp -=1
if a == m and b == n:
return True
else:
return False
def dfs(k):# 遍历所有第一排
global res
if k > row:
if check():
res +=1
return
cnt[k] = 1
dfs(k+1)
cnt[k] = 2
dfs(k+1)
if __name__ == "__main__":
m = int(input())
n = int(input())
res = 0
cnt = [0 for _ in range(100010)]
row = int(math.sqrt(2*(m+n)))
dfs(1)
print(res)
13.七星填空
import itertools
nums = [i for i in range(1, 15)]
nums.remove(6)
nums.remove(11)
nums.remove(14)
print(len(nums))
def check(ls):
value = [0 for i in range(7)]
value[0] = ls[0] + ls[1] + ls[2] + ls[3]
value[1] = ls[1] + ls[10] + 20
value[2] = ls[2] + ls[4] + 17
value[3] = ls[5] + ls[7] + ls[9] + 11
value[4] = ls[3] + ls[4] + ls[6] + ls[5]
value[5] = ls[7] + ls[8] + ls[6] + 14
value[6] = ls[0] + ls[9] + ls[10] + ls[8]
for m in range(7):
for n in range(7):
if value[m] != value[n]:
return False
return True
for num in itertools.permutations(nums):
if check(num):
for i in range(4):
print(num[i], end=" ") # 10,3,9,8