【蓝桥杯python组】【2021年第十二届省赛填空题】【1】
发布时间
阅读量:
阅读量
已有近9个月未曾对博客进行更新
这段时间略感懒散 假期恰是最佳创作时机
最近博客内容主要聚焦于蓝桥杯Python组相关内容的更新 期待您的关注与支持
小蓝拥有一批数字卡片,在每张卡片上都标有从0到9的数字。为了系统地构建一系列整数序列,他打算利用这些卡片来生成所有可能的正整数值。具体来说,在生成每一个新的数值后就将其记录下来,并将这些已使用的卡片移除出可用范围以避免重复使用。基于当前的情况,在手头拥有数量充足的资源(即每种数字各有2021张)的情况下,请问他最多能连续拼出多少个正整数值?
答案:3181
解题思路:本题的解题思路聚焦于列表的设置以及对每个数字的拆分。
a = [2021 for i in range(10)]#初始化
def check(x):
while(x > 0):
now = int(x % 10)
if(a[now] > 0):
a[now] -= 1
else:
return 0
x = x // 10
return 1
cnt = 1
while(check(cnt)):
cnt += 1
print(cnt - 1)#X+1无法拼凑但是countnum已经加一,所以这里要减一噢
在平面直角坐标系中,两个不同的点可以唯一决定一条直线。当多个点位于同一直线上时,则这些点中任意两个不同的点所决定的直线是完全重合的。
给定平面上由2×3个整点构成的集合{(x, y)|0 ≤ x < 2且0 ≤ y < 3且x∈Z且y∈Z}(即横坐标为0到1之间的整数、纵坐标为0到2之间的整数),这些整点共同形成了11条互不相同的直线。
那么由这20×21个整点所形成的集合能够生成多少条互不相同的直线呢?
解题思路:本道题的一个难点在于当点的数量较少且结构较为简单时(容易导致解题者忽视),特别是在结构较为复杂的情况下(这时就需要关注),需要特别注意斜率k以及截距d来区分是否是同一条直线 。
答案:40257
#方法一:这种方法实际上比较复杂
import os
import sys
class Line(object): #直线类
def __init__(self): #初始化
self.k = 0
self.b = 0
def __lt__(self, t):#sort函数的调用
if self.k != t.k:
return self.k < t.k
return self.b < t.b
N = 200000
n = 0
l = [Line() for _ in range(N)] #每个list存放Line类
for x1 in range(0, 20):
for y1 in range(0, 21):
for x2 in range(0, 20):
for y2 in range(0, 21):
if x1 != x2: #为了避免斜率不存在的情况
k = float((y2 - y1)) / (x2 - x1)
b = float(y2 - k * x2)
l[n].k = k
l[n].b = b
n += 1
L = l[0: n]
L.sort()
res = 1
for i in range(1, n): #比较
if abs(L[i].k - L[i - 1].k) > 1e-8 or abs(L[i].b - L[i - 1].b) > 1e-8:
res += 1
print(res + 20) #加上斜率不存在的情况
#方法二:考虑到set集合的特性,这里使用集合去重
xlist=[i for i in range(20)]
ylist=[i for i in range(21)]
points=[(x,y) for x in xlist for y in ylist]
s=set();
def getline(p,q):
k=(q[1]-p[1])/(q[0]-p[0])
b=q[1]-q[0]*k;
return round(k,8),round(b,8)
for p in points:
for q in points:
if p!=q and p[0]!=q[0]:
s.add(getLine(p,q))
print(len(s)+20)
蓝桥杯python组
这篇文章将在本节结束时发布完毕!随后发布的关于2021年省赛填空题的相关链接将会放置在以下位置:
蓝桥杯python组
如有错误之处还请多多指教~
全部评论 (0)
还没有任何评论哟~
