赞
踩
最近忙着备战期末考,刷算法的时间是越来越少了...
目录
题目:
小蓝有很多数字卡片,每张卡片上都是数字 0 到 9。 小蓝准备用这些卡片来拼一些数,他想从 1 开始拼出正整数,每拼一个, 就保存起来,卡片就不能用来拼其它数了。 小蓝想知道自己能从 1 拼到多少。 例如,当小蓝有 30 张卡片,其中 0 到 9 各 3 张,则小蓝可以拼出 1 到 10, 但是拼 11 时卡片 11 已经只有一张了,不够拼出 11。 现在小蓝手里有 0 到 9 的卡片各 2021 张,共 20210 张,请问小蓝可以从 1 拼到多少? 提示:建议使用计算机编程解决问题
思路:
for循环走一遍,直到其中一个数字不够用
代码:
- def main():
- nums=[2021 for _ in range(10)]
- n=1
- while 1:
- for i in str(n):
- nums[int(i)] -= 1
- if nums[int(i)]<0:
- return n-1
- n += 1
-
- print(main())
答案:3181
题目:
在平面直角坐标系中,两点可以确定一条直线。
给定平面上 20 × 21 个整点 {(x, y)|0 ≤ x < 20, 0 ≤ y < 21, x ∈ Z, y ∈ Z},即横 坐标是 0 到 19 (包含 0 和 19) 之间的整数、纵坐标是 0 到 20 (包含 0 和 20) 之 间的整数的点。
请问这些点一共确定了多少条不同的直线。
思路:
斜率k=0和无穷的线个数有m+n个,然后创建一个set集合,加进每个点对应k和b的值,最后len一下
代码:
- def main(m,n):
- res=set()
- point=[[x,y] for x in range(m) for y in range(n)]
- for i in range(len(point)-1):
- for j in range(i+1,len(point)):
- x1,y1=point[i][0],point[i][1]
- x2,y2=point[j][0],point[j][1]
- if x1==x2 or y1==y2:
- continue
- else:
- k=(y2-y1)/(x2-x1)
- b=(x2*y1-x1*y2)/(x2-x1)
- #print((x1,y1),(x2,y2),(k,b))
- res.add((k,b))
- return len(res)+m+n
- print(main(20,21))
答案:40257
题目:
小蓝有一个超大的仓库,可以摆放很多货物。
现在,小蓝有n箱货物要摆放在仓库,每箱货物都是规则的正方体。小蓝规定了长、宽、高三个互相垂直的方向,每箱货物的边都必须严格平行于长、宽、高。
小蓝希望所有的货物最终摆成一个大的立方体。即在长、宽、高的方向上分别堆L、W、H的货物,满足n=L×W×H
给定n,请问有多少种堆放货物的方案满足要求。
例如,当n=4时,有以下6种方案:1×1×
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。