蓝桥杯python部分题目和答案分享(个人做法)易懂(3) [十题]

目录

第二十一题:石子游戏

第二十二题:数的分解方法

第二十三题:数列求值

第二十四题: 数位递增的数

第二十五题:特殊回文数

第二十六题: 完全二叉树的权值

第二十七题: 晚会节目单

第二十八题:芯片测试

第二十九题: 幸运顾客

第三十题:序列计数(重点 难点!)


第二十一题:石子游戏

n = int(input('地上有n堆石子:')) # 堆数n

ls = []
for i in range(n):
    ls.append(int(input())) # 每堆石子的个数存入列表

'''ls = [int(input()) for i in range(n)] #这样也可遍历生成列表'''

ls.sort()
score = 0

# 实现 每次取最大两堆合并
while len(ls) > 1:
    score += (ls[-1] +1) * (ls[-2] +1)
    ls[-2] += ls[-1]
    ls.pop(-1) #补充:列表中删除元素有三种方法(del,remove,pop)
    
print(score) # 输出得分score

第二十二题:数的分解方法


num = 0
for i in range(1,2019):
    if '2' not in str(i) and '4' not in str(i):  # py的and是连接条件语句
        for j in range(i+1,2019):
            if '2' not in str(j) and '4' not in str(j):
                #这里k不能用for否则会超时(嵌套for耗时很长,尽量不用)
                k = 2019 -i-j
                if k >j and '2' not in str(k) and '4' not in str(k):
                    if i+j+k ==2019:
                        num += 1
print(num)

第二十三题:数列求值

n = eval(input('输入第?项(n>=4):'))
num1,num2,num3 = 1,1,1
for i in range(4,n+1):
    num1,num2,num3 = num2,num3,(num1+num2+num3) %10000
    #注意 num3 这里取余,加快运算和直接求后四位数(不影响结果)

print(num3) #直接print出来的是第n项后四位数

第二十四题: 数位递增的数


n = int(input('请输入整数n:'))
num = 0  #有num个数位递增的数
for i1 in range(1,n+1):
    s = str(i1)
    ct_num = 0  #前后两数满足数位递增,则+1
    for i2 in range( len(s) -1):
        if s[i2] <=s[i2+1]:
            ct_num += 1
    if ct_num == len(s)-1:  #如果ct_num=比较次数,符合数位递增
        num += 1

print(num)

第二十五题:特殊回文数

ls = []
n = int(input('输入一个正整数n:'))

# 求6位的回文数
for i in range(1,1000):
    for j in range(1,1000):
        if i == int(str(j)[::-1]):
            s = str(j)+str(j)[::-1]
            sumk = 0
            if len(s) == 6:
                for k in range(len(s)):
                    sumk += int(s[k])
                    if sumk == n:
                        ls.append(int(s))

# 求5位的回文数
for i in range(1,1000):
    for j in range(1,100):
        i = str(i)
        if i[0:-1] == str(j)[::-1]:
            s = i + str(j)
            sumk = 0
            if len(s) == 5:
                for k in range(len(s)):
                    sumk += int(s[k])
                    if sumk == n:
                        ls.append(int(s))

ls.sort(key=lambda x:x)
for _ in ls:
    print(_)

第二十六题: 完全二叉树的权值

n = int(input('一个整数 N:'))
values = list(map(int,input('N个整数:').split()))  #把输入n个数转化列表

m =0  #计算二叉树的深度k(结点个数=2**k -1)
while 2**m -1 !=n:
    m +=1

d = {}
for i in range(m):
    a,b = 2**i -1, 2**(i+1) -1
    d[i+1] = sum(values[a:b])  #字典,key层数:value该层权值的和

ls = list(d.items())
ls.sort(key=lambda x:x[1])  #按照层数对应权值和,从小到大排序
print(ls[-1][0])

第二十七题: 晚会节目单

n,m = map(int,input('两个整数 n, m:').split())
level = list(map(int,input('n个整数,为每个节目好看值:').split()))

ls = level.copy()
ls.sort(key=lambda x:x,reverse=True)
ls = ls[0:m]

lv_ls = []
for i in level:
    for j in ls:
        if i == j:
            lv_ls.append(i)
            break
print(lv_ls)

第二十八题:芯片测试

n = int(input('整数n(2≤n≤20)表示芯片个数:'))
good = []

for i in range(1,1+n):
    ni = list(map(int,input('每行n个数据:').split()))
    if ni.count(0) <= n/2:
        good.append(str(i))
        
print(' '.join(good))  #注意join函数 只能连接str类型的列表元素

第二十九题: 幸运顾客

n = int(input('整数N,表示命令数:'))
all_ls = []

good_num = 0
good_ls = []
for i in range(n):
    m = input('每行一个数:')
    if int(m) >=0:
        all_ls.append(m)
        all_ls.sort()
    elif int(m) == -1:
        good_ls.append(all_ls[good_num])
        good_num +=1
        
print('\n'.join(good_ls))

第三十题:序列计数(重点 难点!)

def get_num(x,y):  #函数递归 学会很重要
    num = 0  #有num个序列
    if abs(x-y) <=1:
        num +=1  #不能再分支
    else:
        num +=1  #如果可以产生分支,截止到该分支点的路径 也算一个序列
        for n3 in range(1,abs(x-y)):
            num += get_num(y,n3)
    return num

n1 = int(input())
all_num = 0
for n2 in range(1,n1+1):
    all_num += get_num(n1,n2)
    
print(all_num)

》》》如果第30题有不懂的,请看如下个人分析/解析:

(例如:输入4):

 

——————————————— Thanks♪(・ω・)ノ感谢阅读 ————————————————

题目资源来自:寻找永不遗憾的博客_CSDN博客-深度学习基础知识,地平线开发板相关,目标检测系列领域博主

做法以及答案来自笔者:

小白非常的博客_CSDN博客-python,后端,Django领域博主

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值