赞
踩
自己最近做了一遍,只会做其中的部分题目,想分享一下。
小蓝有很多数字卡片,每张卡片上都是数字0 到9。
小蓝准备用这些卡片来拼一些数,他想从1 开始拼出正整数,每拼一个,
就保存起来,卡片就不能用来拼其它数了。
小蓝想知道自己能从1 拼到多少。
例如,当小蓝有30 张卡片,其中0 到9 各3 张,则小蓝可以拼出1 到10,
但是拼11 时卡片1 已经只有一张了,不够拼出11。
现在小蓝手里有0 到9 的卡片各2021 张,共20210 张,请问小蓝可以从1
拼到多少?
提示:建议使用计算机编程解决问题。
自己的理解,这道题1用的最多,只需要把数字1用完就可以了。
答案 3181
ans=0
for i in range(1,3182):
for j in str(i):
if j=="1":
ans+=1
print(ans)
小蓝有一个超大的仓库,可以摆放很多货物。
现在,小蓝有n 箱货物要摆放在仓库,每箱货物都是规则的正方体。小蓝
规定了长、宽、高三个互相垂直的方向,每箱货物的边都必须严格平行于长、
宽、高。
小蓝希望所有的货物最终摆成一个大的立方体。即在长、宽、高的方向上
分别堆L、W、H 的货物,满足
n
=
L
∗
W
∗
H
n=L*W*H
n=L∗W∗H。
给定n,请问有多少种堆放货物的方案满足要求。
例如,当n = 4 时,有以下6 种方案:
1
∗
1
∗
4
1*1*4
1∗1∗4、
1
∗
2
∗
2
1*2*2
1∗2∗2、
1
∗
4
∗
1
1*4*1
1∗4∗1、
2
∗
1
∗
2
2*1*2
2∗1∗2、
2
∗
2
∗
1
2*2*1
2∗2∗1、
4
∗
1
∗
1
4*1*1
4∗1∗1。
请问,当n = 2021041820210418 (注意有16 位数字)时,总共有多少种
方案?
提示:建议使用计算机编程解决问题。
最开始,我用的暴力法,直接遍历所有情况。然后运行不出来,借鉴别人的思想,进行改进。
ll = set()
for i in range(1, 2021041820210419):
for j in range(1, 2021041820210419):
for m in range(1, 2021041820210419):
if i * j * m == 2021041820210418:
ll.add((i, j, m))
print(len(ll))
from math import sqrt ll = [] temp = 2021041820210418 mm = int(sqrt(temp)) for i in range(1, mm + 1): if temp % i == 0: ll.append(i) ll.append(temp / i) s = set() for i in range(len(ll)): for j in range(len(ll)): for m in range(len(ll)): if ll[i] * ll[j] * ll[m] == temp: s.add((ll[i], ll[j], ll[m])) print(len(s))
小蓝学习了最短路径之后特别高兴,他定义了一个特别的图,希望找到图
中的最短路径。
小蓝的图由2021 个结点组成,依次编号1 至2021。
对于两个不同的结点a, b,如果a 和b 的差的绝对值大于21,则两个结点
之间没有边相连;如果a 和b 的差的绝对值小于等于21,则两个点之间有一条
长度为a 和b 的最小公倍数的无向边相连。
例如:结点1 和结点23 之间没有边相连;结点3 和结点24 之间有一条无
向边,长度为24;结点15 和结点25 之间有一条无向边,长度为75。
请计算,结点1 和结点2021 之间的最短路径长度是多少。
提示:建议使用计算机编程解决问题。
运行时间很长,但是能运行出来。
#计算公约数 def gcd(a, b): if (b == 0): return a else: return gcd(b, a % b) # 计算公倍数 def gbs(a, b): return a / gcd(a, b) * b # 最短路径算法 mp = [[0] * 3000 for i in range(3000)] inf = 999999999999999999999999999999 for i in range(1, 2022): for j in range(i, 2022): mp[i][j] = mp[j][i] = inf for i in range(1, 2022): for j in range(i, 2022): if j - i <= 21: mp[i][j] = mp[j][i] = gbs(i, j) for i in range(1, 2022): for j in range(1, 2022): for k in range(1, 2022): if mp[i][k] + mp[k][j] < mp[i][j]: mp[i][j] = mp[j][i] = mp[i][k] + mp[k][j] print(mp[2021][1])
小蓝要和朋友合作开发一个时间显示的网站。在服务器上,朋友已经获取
了当前的时间,用一个整数表示,值为从1970 年1 月1 日00:00:00 到当前时
刻经过的毫秒数。
现在,小蓝要在客户端显示出这个时间。小蓝不用显示出年月日,只需要
显示出时分秒即可,毫秒也不用显示,直接舍去即可。
给定一个用整数表示的时间,请将这个时间对应的时分秒输出。
n = int(input()) h, m, s = 0, 0, 0 h = int((n / (1000 * 60 * 60)) % 24) m = int((n / (1000 * 60) % 60)) s = int((n / 1000) % 60) if h < 10: h = "0" + str(h) else: h = str(h) if m < 10: m = "0" + str(m) else: m = str(m) if s < 10: s = "0" + str(s) else: s = str(s) print(h + ":" + m + ":" + s)
ll = [[1], [1, 1]] N = int(input()) for i in range(2, 800): sump = ll[-1] cur = [1] for j in range(i - 1): cur.append(sump[j] + sump[j + 1]) cur.append(1) # print(cur) ll.append(cur) print(ll) mm = [] index=0 for i in range(800): for j in range(i+1): mm.append(ll[i][j]) for i in range(len(mm)): if mm[i]==N: index=i+1 break print(index)
from itertools import permutations def chkParenthesis(A, n): if n % 2 != 0: return False i = 0 count = 0 while i < n: if A[i] == '(': count += 1 elif A[i] == ')': count -= 1 else: return False if count < 0: return False i += 1 if count == 0: return True return False kuohao = input("") # print(chkParenthesis(kuohao,len(kuohao))) left, right = 0, 0 for i in range(len(kuohao)): if kuohao[i] == "(": left += 1 if kuohao[i] == ")": right += 1 if left < right: left = right else: right = left mm = [] for i in range(left): mm.append("(") mm.append(")") # print(mm) ll = list(set(permutations(mm))) ans = 0 for i in range(len(ll)): if chkParenthesis(ll[i], len(ll[i])): ans += 1 print(ans % 1000000007)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。