第一题:跑步训练
s = 10000
v1 = 600
v2 = 300
use = v1 - v2 #表示二分钟消耗的体力
t1 = (s // use) -1
t2 = s - use*t1 #t1分钟后剩下的体力
v3 = v1 // 60 #表示每休息一秒钟消耗的体力
time = t1*2 *60 + t2 // v3
print(time)
答案:3880
第二题:阶乘约数
fac = [2]
for i in range(2,101):
for j in range(2,i):
if i %j == 0:
break
if j == i-1:
fac.append(i)
print(fac)
total = 1
fac_dic = {}
for i in fac:
fac_dic[i] = 0
for i in range(2,101):
for j in fac:
if i < j:
break
while i % j == 0:
fac_dic[j] += 1
i //= j
print(fac_dic)
for val in fac_dic.values():
total *= (val+1)
print(total)
答案:39001250856960000
第三题:出栈次序
def f(x):
sum = 0
if x == 0 or x == 1:
return 1
elif x > 0:
for i in range(x):
sum += f(i)*f(x-i-1)
return sum
x = 16
print(f(x))
答案:35357670
第四题:哥德巴赫分解
def prime(x):
for i in range(2,x):
if x%i == 0:
return False
return True
import itertools
li = []
ls = []
for i in range(2,10000):
if prime(i):
li.append(i)
tmp = list(itertools.combinations(li,2))
for j in range(4,10000,2):
for m in tmp:
if j == sum(m):
ls.append(min(m))
break
print(max(ls))
答案:173
第五题:图书排列
import itertools
li = [i for i in range(1,11)]
def check(x):
for i in range(9):
if abs(x[i] - x[i+1]) ==1:
return False
break
return True
res = 0
for i in itertools.permutations(li,len(li)):
if check(i):
res += 1
print(res)
答案:479306
第六题:猴子分香蕉
n = 6
flag = True
while flag:
if n%5 == 1:
a = (n-1)//5 *4
if a%5== 2:
b = (a-2)//5 *4
if b%5==3:
c = (b-3)//5*4
if c%5==4:
d = (c-4)//5*4
if d%5==0 and d>0:
break
n += 1
print(n)
答案:3141
第七题:稍小分数
def judge(a,b):
if a>b:
return False
else:
ls1 = set()
ls2 = set()
for i in range(1,a+1):
if a%i == 0:
ls1.add(i)
for i in range(1,b+1):
if b%i == 0:
ls2.add(i)
if ls1&ls2 == {1}:
return True
else:
return False
m = int(input()) #输入的分数的分子
n = int(input()) #输入的分数的分母
ls = []
for i in range(1,101):
for j in range(1,100):
if judge(j,i) and j*n < m*i:
ls.append((j,i))
max_nu = ls[0][0]/ls[0][1]
for m in range(len(ls)):
if max_nu < ls[m][0]/ls[m][1]:
max_nu = ls[m][0]/ls[m][1]
print("要求的分数是:{}/{}".format(ls[m][0],ls[m][1]))
第八题: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='')
第九题:日期问题
不会
第十题:整数划分
divide_number = {0: 0}
times = 0
def int_divide(number, index):
global times
for i in range(1, number+1):
if i >= divide_number[index-1]:
divide_number[index] = i
number_rest = number - i
if number_rest == 0:
for j in range(1, index):
print(str(divide_number[j])+'+', end='')
print(str(divide_number[index]))
else:
int_divide(number_rest, index+1)
else:
pass
n = int(input("输入一个整数:"))
int_divide(n, 1)
print("该整数的划分数为:%d" %times)
第十一题:一步之遥
for x in range(10000):
for y in range(10000):
t = 97*x - 127*y
if t == 1:
print(x+y)
break
答案:97
第十二题:机器人塔
a=list(map(int,input().split()))
s=sum(a)
ab=[1,2]
for i in range(2,1000):
if s==((i+1)*i)//2:
o=i
break
c=[[0 for i1 in range(o+1)] for i in range(o+1)]
con=0
def ck(i,r,l):
global a
if a[i]-1>=0:
c[r][l]=ab[i]
a[i]-=1
if l>=r:
dfs(r-1,0)
else:
dfs(r,l+1)
c[r][l]=0
a[i]+=1
def dfs(r,l):
global con
if r==-1:
con+=1
return
elif r==o-1:
for i in range(2):
ck(i,r,l)
elif c[r+1][l]==c[r+1][l+1]:
ck(0,r,l)
elif c[r+1][l]!=c[r+1][l+1]:
ck(1,r,l)
dfs(o-1,0)
print(con)
第十三题:七星填空
import itertools
li = [i for i in range(1,15)]
def check(a):
a[0]=6
a[7]=14
a[8]=11
num1 = a[1]+a[2]+a[3]+a[4]
num2 = 6+a[2]+a[5]+a[7]
if num1 != num2:
return False
num3 = 6+a[3]+a[6]+a[8]
if num2 != num3:
return False
num4 = a[1]+a[5]+a[9]+a[12]
if num3 != num4:
return False
num5 = a[4]+a[6]+a[10]+a[13]
if num4 != num5:
return False
num6 = a[7]+a[9]+a[11]+a[13]
if num5 != num6:
return False
num7 = a[8]+a[10]+a[11]+a[12]
if num6 != num7:
return False
else:
return True
for i in itertools.permutations(li,len(li)):
if check(list(i)):
ls = i
break
for i in range(4):
print(ls[i+1])
答案:10 3 9 8