2021年第十二届蓝桥杯赛题总览

2020年的题就是这些,类型分为两种,分别是结果填空和程序设计,我们每天刷一道题,省赛没问题!

Python程序设计教学竞赛课题 python程序设计比赛_python

 


—>【问题描述】

小蓝有很多数字卡片,每张卡片上都是数字 00 到 99。 小蓝准备用这些卡片来拼一些数,他想从 11 开始拼出正整数,每拼一个, 就保存起来,卡片就不能用来拼其它数了。 小蓝想知道自己能从 11 拼到多少。 例如,当小蓝有 3030 张卡片,其中 00 到 99 各 33 张,则小蓝可以拼出 11 到 1010, 但是拼 1111 时卡片 11 已经只有一张了,不够拼出 1111。 现在小蓝手里有 00 到 99 的卡片各 20212021 张,共 2021020210 张,请问小蓝可以从 11 拼到多少? 提示:建议使用计算机编程解决问题

—>【结果描述】

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。


解析


通过阅读题干,本题——难度简单:⭐

考察类型:暴力、填空

考察知识点:字典、枚举


分析:

根据题干来看,很简单了。如果说我们直接暴力,判断用过一张数字之后就减少一张,这样一直试探循环,简单粗暴!

下面直接开干!!!


代码

Python代码实现:
法一:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2022/3/5 20:01
# @Author  : 府学路18号车神
# @Email   :yurz_control@163.com
# @File    : Day11.py

# 2021张从0~9的数,共计20210张
n = 2021
number = ['0','1','2','3','4','5','6','7','8','9']  # 十个数字字符
num = {}  # 利用字典
for i in number:
    if i not in num:
        num[i] = n
print(num)      # {'0': 2021, '1': 2021, '2': 2021, '3': 2021, '4': 2021, '5': 2021, '6': 2021, '7': 2021, '8': 2021, '9': 2021}



# 循环迭代
res = 0      # 设置计数器
stop = 0     # 设置出口标识符
while True:
    if stop == 1:
        break   # 设置出口
    # 组合数字
    res += 1    # 开始叠加
    res_str = [x for x in str(res)]      # 将数字转化字符,再将数字分离多个字符
    print(res_str)      # 如:['1', '2']
    # 查找删除字典内的数字
    for y in res_str:
        if y in num:
            num[y] -= 1                       # 如果包含一个数字,则删除一个
    if 0 in num.values():                     # 如果num里面有一个数字的值为0,也就是说用完了,那么就停止计算,设置停止条件
        stop = 1

print(res)      # 可以拼到数字3181
示例1:

Python程序设计教学竞赛课题 python程序设计比赛_程序设计_02


法二:

num=0  #用num用来累计用过的数字“1”的次数
for i in range(1,10000):
       num+=str(i).count("1")  #出现过几次1就 给num加上多少
       if num>2021:  #当num数量超过2021时卡牌数量不足
              break
print(i-1)

Python程序设计教学竞赛课题 python程序设计比赛_程序设计_03