第一题:跑步训练
答案:3880
代码如下
第二题:阶乘约数
答案:39001250856960000
代码如下
#阶乘约数 n = 100 # 因为数不大,就用最普通的方法统计质数了。 p = [2] for i in range(3, n + 1): j = 2 while j < i: if i % j == 0: break j += 1 else: p.append(i) #print(p) # 2 3 5 7 ... 97(求出所有的质数。) m = {} for i in p: m[i] = 1 # 每个质数初始为 1,代表不选这个质数的可能。 for i in range(2, n + 1): # 遍历 [2, 100] x = i for j in p: # 遍历质数,将每个被乘数都质因数分解一下。 # (比如 6 分解成 2*3 ,12 分解成 2*2*3) if j > x: break while x % j == 0: x //= j # 让对应的质数个数 + 1 m[j] += 1 s = 1 # 所有质因子的个数相乘,就是约数个数了。 for i in m.values(): s *= i print(s)
第三题:出栈次序
答案:35357670
代码如下
第四题:哥德巴赫分解
答案:173
代码如下
def find(n): def IsPrime(num): if num < 2: return False if num == 2: return True for w in range(2,num): if num % w == 0: return False return True for i in range(2, n // 2 + 1): if IsPrime(i) and IsPrime(n - i): return [i,n-i] ls = [] for i in range(4,10001,2): ls.append(min(find(i))) print(max(ls))
运行结果如下:
第五题:图书排列
答案:479306
代码及运行结果如下:
第六题:猴子分香蕉
答案:3141
代码及运行结果如下
第七题: 代码如下
from fractions import Fraction def check(x): if x == 2: return True for i in range(2, x): if x%i==0: return False return True if __name__ == '__main__': m = [] All = [] for i in range(2, 100): if check(i): m.append(i) print(m) for i, j in enumerate(m): for k in m[:i]: a = Fraction(k, j) if a not in All: All.append(a) All = sorted(All) print(All) a = int(input('输入分子:')) b = int(input("输入分母:")) num = Fraction(a, b) out = False for i in range(len(All)): if All[i] >= num: print(All[i-1]) out = True break if not out: print(All[-1])
第八题:excel地址
代码如下
x = [chr(i) for i in range(65,91)] n = int(input()) res = [] while n != 0: if n % 26 == 0: res.append(26) n = n // 26 - 1 else: res.append(n % 26) n = n//26 for i in range(len(res)): res[i] = x[res[i]-1] res.reverse() print(''.join(res))
第九题:日期问题
代码如下
def solution(all_date): for date in all_date: flag = 1 s = '' #年份 if date[0] >= '60' and date[0] <= '99': s = s + '19' + date[0] + '-' elif date[0] < '60' and date[0] > '00': s = s + '20' + date[0] + '-' else: flag = 0 #月份 if date[1] > '00' and date[1] <= '12': s = s + date[1] + '-' else: flag = 0 #日 if date[2] > '00' and date[2] <= '31': s = s + date[2] else: flag = 0 if flag == 1: print(s) return if __name__ == '__main__': s = '02/03/04' date = [s[:2],s[3:5],s[6:]] all_date = [#日期的三种可能情况 [date[0],date[1],date[2]], [date[2],date[0],date[1]], [date[2],date[1],date[0]]] all_date.sort() solution(all_date)
第十题:整数划分
代码如下
#整数划分 def solution(n): ans = [[n]] for i in range(1,n): a = [[n]] while a[-1][-1] - i> 0: tmp = a[-1][:-1] + [i,a[-1][-1] - i] tmp.sort() if tmp not in a: a.append(tmp) for j in a: if j not in ans: ans.append(j) #for j in ans: # print(j) return len(ans) if __name__ == '__main__': n = 5 ans = solution(n) print(ans)
第十一题:一步之遥
答案:97
代码及运行结果如下
第十二题:机器人塔
代码如下
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)
第十三题:七星填空
代码如下:
import itertools x = [i for i in range(1, 15)] x.remove(6) x.remove(11) x.remove(14) def check(a):# 这道题对数字的排序完全是自定义,每次比较是为了减少所需要的时间 num1 = a[0] + a[1] + a[2] + a[3] num2 = 6 + a[1] + a[4] + 14 if num1 != num2: return False num3 = 6 + a[2] + a[5] + 11 if num2 != num3: return False num4 = a[3] + a[5] + a[7] + a[10] if (num3 != num4): return False num5 = a[8] + a[9] + a[7] + 11 if (num4 != num5): return True num6 = a[6] + a[10] + a[8] + 14 if (num5 != num6): return False num7 = a[0] + a[4] + a[6] + a[9] if (num6 != num7): return False return True for i in itertools.permutations(x): if check(i): print(i) for j in range(4): print(i[j]) break