蓝桥杯-2018年省赛A组1-6题(python解题)蓝桥杯-2018年省赛A组(python解题)
写在前⾯的话:由于⽔平不⾼,⽬前只写了前⾯六道题,后⾯加油把另外四道难⼀点的题写出来
第⼀题分数
题⽬描述
算出结果
1/1+1/2+1/4+1/8+⋯
每项是前⼀项的⼀半,如果⼀共有 20项,求这个和是多少,结果⽤分数表⽰出来。
类似:3/2,当然,这只是加了前 2项⽽已。分⼦分母要求互质。
题⽬解答
'''
⽅法⼀:⾃⼰的思路
'''
L =[2**i for i in range(20)]
fenzi =sum(L)
fenmu = L[-1]
print(fenzi)
print(fenmu)
#化简,因为题⽬要求分⼦分母互质,可以思考求两个数的最⼤公因数,除以最⼤公因数之后就是最简形式
for i in range(fenmu,1,-1):
if( fenzi % i ==0and fenmu % i ==0):
fenzi = fenzi / i
fenmu = fenmu / i
print("{}/{}".format(fenzi,fenmu))
'''
⽅法⼆:直接计算,没有判断是否互质,可以加⼊fraction函数
'''
fenmu =2**19
fenzi =2**20-1
print('%d/%d'%(fenzi, fenmu))
'''
⽅法三:学习新的知识
fractions是分数模块,Fraction(分⼦,分母)函数能将分数化简,同时输出a/b的形式
'''
import fractions
sum=0
for i in range(20):
sum+=1/(2**i)
print(fractions.Fraction(sum))
第⼆题星期⼀
题⽬描述
整个 2020 世纪(19011901 年 11 ⽉ 11 ⽇⾄ 20002000 年
1212 ⽉ 3131 ⽇之间),⼀共有多少个星期⼀?
题⽬解答
'''
⽅法⼀:⽤datetime模块算出两个时间点隔的天数
'''
import datetime
dt1 = datetime.datetime(1901,1,1)
print(dt1)
dt2 = datetime.datetime(2000,12,31)
print(dt2)
days = dt2 - dt1
print(days)
count = days //7
print(count)
'''
⽅法⼆:每⼀年的天数之和加起来得到总天数,然后整除7,但是要注意判断闰年的年份
'''
count =0
for i in range(1901,2001):
if(i%4==0and i %100!=0)or(i %400==0):#闰年的判断条件
count +=366
else:
count +=365
print(count //7)
第三题乘积尾零
题⽬描述
如下的 1010 ⾏数据,每⾏有 1010 个整数,请你求出它们的乘积的末尾有多少个零?
5650 4542 3554 473 946 4114 3871 9073 90 4329
2758 7949 6113 5659 5245 7432 3051 4434 6704 3594
9937 1173 6866 3397 4759 7557 3070 2287 1453 9899
1486 5722 3135 1170 4014 5510 5120 729 2880 9019
2049 698 4582 4346 4427 646 9742 7340 1230 7683
5693 7015 6887 7381 4172 4341 2909 2027 7355 5649
6701 6645 1671 5978 2704 9926 295 3125 3878 6785
2066 4247 4800 1578 6652 4616 1113 6205 3264 2915
3966 5291 2904 1285 2193 1428 2265 8730 9436 7074
689 5510 8243 6114 337 4096 8199 7313 3685 211
题⽬解答
#知识点:
#尾部为零由2和5的个数决定,单5(因式分解后有1个5)与某偶数相乘有单0,多5(如25,因式分解后有2个5)与某偶数相乘有多个0
#⼀道思考题:计算n阶乘中尾部零的个数
L =[5650,4542,3554,473,946,4114,3871,9073,90,4329,2758,7949,6113,5659,5245,7432,3051,4434,6704,3594,9937,1173,6866,3397,475 9,7557,3070,2287,1453,9899,1486,5722,3135,1170,4014,5510,5120,729,2880,9019,2049,698,4582,4346,4427,646,9742,7340,1230,768 3,5693,7015,6887,7381,4172,4341,2909,2027,7355,5649,6701,6645,1671,5978,2704,9926,295,3125,3878,6785,2066,4247,4800,1578,6 652,4616,1113,6205,3264,2915,3966,5291,2904,1285,2193,1428,2265,8730,9436,7074,689,5510,8243,6114,337,4096,8199,7313,3685, 211]
#print(len(L))
count2=0python格式化输出format
count5 =0
for i in range(len(L)):
tmp = L[i]
while(tmp %5==0):
count5 +=1
tmp /=5
while(tmp %2==0):
count2 +=1
tmp /=2
print(min(count2, count5))
第四题第⼏个幸运数字
题⽬描述
到 X 星球旅⾏的游客都被发给⼀个整数,作为游客编号。
X 星的国王有个怪癖,他只喜欢数字 3,5 和 7。
国王规定,游客的编号如果只含有因⼦:3,5,7就可以获得⼀份奖品。
我们来看前 10 个幸运数字是:
3 5 7 9 15 21 25 27 35 45
因⽽第 11个幸运数字是: 49
⼩明领到了⼀个幸运数字 59084709587505,他去领奖的时候,⼈家要求他准确地说出这是第⼏个幸运数字,否则领不到奖品。请你帮⼩明计算⼀下,59084709587505是第⼏个幸运数字。
题⽬解答
#通过遍历的⽅式,30次⽅肯定⽐要求的数⼤,所以i循环30次⾜够
count =0
for i in range(30):
for j in range(30):
for k in range(30):
if((3**i)*(5**j)*(7**k)<=59084709587505):
count +=1
#print(count)
else:
break
print(count -1)#因为循环的时候把 3**0 * 5**0 * 7**0 也算进来了,所以要减去⼀个
第五题打印图形
题⽬描述
标题:打印图形
如下的程序会在控制台绘制分形图(就是整体与局部⾃相似的图形)。
当n=1,2,3的时候,输出如下:
请仔细分析程序,并填写划线部分缺少的代码。
n=1时:
o
ooo
o
n=2时:
o
ooo
o
o  o  o
ooooooooo
o  o  o
o
ooo
o
n=3时:
o
ooo
o
o  o  o
ooooooooo
o  o  o
o
ooo
o
o        o        o
ooo      ooo      ooo
o        o        o
o  o  o  o  o  o  o  o  o
ooooooooooooooooooooooooooo
o  o  o  o  o  o  o  o  o
o        o        o
ooo      ooo      ooo
o        o        o
o
ooo
o
o  o  o
ooooooooo
o  o  o
o
ooo
o
题⽬解答
def show(L, column):
for i in range(column):
for j in range(column):
print("{}".format('  'if L[i*column+j]==0else'o'),end='')
#python的格式化输出
#python的三⽬运算符print(x if x>y else y) 类似 cout << x>y?x:y;
#注意python的默认打印是换⾏的,所以后⾯end=''不能少
print('\n')
def draw(L, column, x, row, size):
'''
column是列,row是⾏,x是每⼀⾏的偏移
size是画图形的⼤⼩,当size = 1就是画的最⼩的图形
'''
if(size ==1):
L[column * row + x]=1
return
n = size //3
'''
整除3,是因为每⼀次递减,边长变为原来的三分之⼀
列的长度是不⽤变化的
'''
draw(L, column, x, row, n)
draw(L, column, x-n, row, n)
draw(L, column, x+n, row, n)
draw(L, column, x, row-n, n)
draw(L, column, x, row+n, n)
if __name__ =="__main__":
N =1
t =1
for i in range(N):
t *=3
L =[0for i in range(t**2)]
draw(L, t, t//2, t//2, t)#这⾥要取整
show(L, t)
第六题航班时间
题⽬描述

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。