博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python算法学习: 竞码编程-蓝桥杯模拟赛2题解
阅读量:3943 次
发布时间:2019-05-24

本文共 5428 字,大约阅读时间需要 18 分钟。

试题网站:http://oj.hzjingma.com/

文章目录

A. 试题A:完美车牌 5’

有一些数字可以颠倒过来看,例如0、1、8颠倒过来还是本身,6颠倒过来是9,9颠倒过来看还是6,其他数字颠倒过来不构成数字。

类似的,一些多位数也可以颠倒过来看,比如106颠倒过来是901

假设某个城市的车牌只由6位数字组成,每一位都可以取0到9。请问这个城市最多有多少个车牌180°180°倒过来恰好还是原来的车牌?

例如:车牌号:886988,倒过来还是886988

【答案提交】

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个数字,填写多余的内容将无法得分。

ans = 0for i in range(1, 1000000):    i = str(i).zfill(6) # 补充前导0    if '2' in str(i) or '3' in str(i) or '4' in str(i) or '5' in str(i) or '7' in str(i):        continue    else:        s = str(i)        s1 = ''        for i in range(6):            if s[5-i] == '6':                s1 += '9'            elif s[5-i] == '9':                s1 += '6'            else:                s1 += s[5-i]        if s == s1:            ans += 1            print(s)print(ans)

B. 试题B:完美日期 5’

不知天上宫阙,今夕是何年。

对于完美日期yyyy/mm/dd,wlxsq的定义是:

年月日中均没有出现数字4,

年月日的数位之和是8的倍数
例如:2020/02/02 就是一个完美日期,没有出现数字4,且数位之和是8的倍数。

wlxsq想知道从2020/02/02开始,第88个完美日期是哪个?

【答案提交】

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个格式yyyy/yy/dd,在提交答案时直接填写这个日期,注意需要如果答案有前导零则不能忽略,填写多余的内容将无法得分。
y = 2020m = 2d = 2day_ = [0, 31,28,31,30,31,30,31,31,30,31,30,31]ans = 0while ans <= 87:    if '4' not in str(y) and '4' not in str(d) and '4' not in str(m):        if d >= 10:            if (y+m+int(str(d)[0])+(int(str(d)[1]))) % 8 == 0:                ans += 1                print(ans)                print(y, m, d)        else:            if (y+m+d)%8 == 0:                ans += 1                print(ans)                print(y, m, d)    d += 1    if d > day_[m]:        d = 1        m += 1    if m > 12:        m = 1        y += 1

C. 试题C:天机锁10’

描述

【问题描述】

天机锁,锁天机~

wlxsq在机缘巧合的情况下就获得一把天机锁。wlxsq迫不及待的想打开这把锁。该锁的密码是由八个数字构成的,每个数字都是[0,9]中的一个~

锁上面写道:

水(数字9)火(数字4)相生相克,同现同隐(要么都出现,要么都不出现),数量一致(且出现则数量得一样多)。

土(数字2)乃大地,为伊始(数字2一定出现)。
世间万物,不过五二(八个数字之和不超过52)。
此乃天机,一日一次之~
由于天机锁一天只能试一次,wlxsq想知道,总共有多少种方案~

ans = 0for i in range(0, 100000000):    s = str(i)    s = s.zfill(8)    if '2' in s:        if '4' in s and '9' in s and s.count('4') == s.count('9'):            if int(s[0])+int(s[1])+int(s[2])+int(s[3])+int(s[4])+int(s[5])+int(s[6])+int(s[7]) <= 52:                ans += 1                print(i)            else:                continue        elif '4' not in s and '9' not in s:            if int(s[0])+int(s[1])+int(s[2])+int(s[3])+int(s[4])+int(s[5])+int(s[6])+int(s[7]) <= 52:                ans += 1                print(i)        else:            continue    else:        continueprint(ans)

D. 试题D:完美运算 10‘

在这里插入图片描述

思路:算出全部情况和A=B的情况,最后(全部情况-A=B情况)/2+A=B情况

def f(n):    x = 3    #n为待转换的十进制数,x为机制,取值为2-16    a=[0,1,2,3,4,5,6,7,8,9,'A','b','C','D','E','F']    b=[]    while True:        s=n // x  # 商        y=n % x  # 余数        b=b+[y]        if s==0:            break        n=s    b.reverse()    ans = ''    for i in b:        ans += str(a[i])    return ansif __name__ == '__main__':    ans = 0    ans2 = 0    for i in range(1, 2021):        for j in range(1, 2021):            a1 = f(i).count('1')            a2 = f(i).count('2')            b1 = f(j).count('1')            b2 = f(j).count('2')            if abs(int(a1)-int(a2)) == abs(int(b1)-int(b2)):                ans += 1            if i == j:                ans2 += 1    print(ans)    print(ans2)

F. 试题F:JM斗牛 17’

描述

JM打完麻将,觉得太简单了,所以决定去斗牛,挑战一下高难度。

一副牌共54张牌,即采用牌大王(1张),小王(1张),K,Q,J,10,9,8,7,6,5,4,3,2,A。除了大小王,其余牌型均为4张。故4*13+2=54张

斗牛则是每人5张牌,计算5张牌的构成的点数,然后比较点数大小。

关于点数计算:

大王(S),小王(S),K,Q,J都当成是10点,A当成是1点,其余牌都当其本身的点数。 大王,小王均用大写字母S表示

每位玩家5张牌,玩家用手上任意的3张牌组合(且只能用3张牌组成10的倍数),使其点数之和为10的倍数,这样就称之为“牛”。
然后将剩余的2张牌点数之和取个位数,如这2张牌之和也为10的倍数,则组成“牛牛”牌型。如这2张牌之和不为10的整数倍,则去掉十位数之后个位数为几,则成为“牛几”牌型。
如任意三张牌组合的点数之和都不能成为10的倍数,则称之为“无牛”牌型。
例如:

牛牛牌型:选取的3张牌之和为10的整数倍,余下2张牌之和也为10的整数倍。例:A,9,10,J,Q.选取(A,9,J)和为10的整数倍,(10,Q构成)牛牛

牛九牌型:选取的3张牌之和为10的整数倍,余下2张牌之和的个位数为9。例:A,9,10,J,9。

牛八牌型:选取的3张牌之和为10的整数倍,余下2张牌之和的个位数为8。例:A,9,10,J,8。

牛七牌型:选取的3张牌之和为10的整数倍,余下2张牌之和的个位数为7。例:A,9,10,J,7。选取(A,9,J)和为10的整数倍,(10,7构成)牛七

无牛牌型: 任意选取的3张牌之和均不可能为10的整数倍例:A,9,8,9,7。

JM会打麻将,但是不怎么会斗牛,想请你帮忙编写程序帮忙计算一下,JM 拿到的牌是什么牌型。

样例

输入A 2 3 5 S输出1输入S S A 8 8输出so sad!输入S S J Q K输出so cool!
def solve(list):    for i in range(5):        for j in range(i + 1, 5):            for k in range(j + 1, 5):                if (list[i] + list[j] + list[k]) % 10 == 0:                    num1 = list[i]                    num2 = list[j]                    num3 = list[k]                    list.remove(num1)                    list.remove(num2)                    list.remove(num3)                    if (list[0] + list[1]) % 10 == 0:                        str1 = "so cool!"                        return str1                    else:                        return (list[0] + list[1]) % 10                else:                    continue    else:        str2 = "so sad!"        return str2if __name__ == '__main__':    str = input()    str = str.replace('A','1')    str = str.replace('S','10')    str = str.replace('K','10')    str = str.replace('Q','10')    str = str.replace('J','10')    list = list(str.split())    for i in range(len(list)):        list[i] = int(list[i])    ans = solve(list=list)    print(ans)

H. 试题H:宝剑锋从磨砺出 20’

在这里插入图片描述

思路: k减去所有材料的p2,然后找到最大的p1去处理k

样例

输入1 10 3 5输出3输入2 103 52 6输出2
n,k = map(int, input().split())ans = 0list1 = []list2 = []for i in range(n):    a,b = map(int, input().split())    list1.append(a)    list2.append(b)list1 = sorted(list1)list2 = sorted(list2)while list2 and list2[-1] > list1[-1] and k > 0:    k -= list2[-1]    list2.pop()    ans += 1if k > 0:    ans += k // list1[-1] + 1print(ans)

转载地址:http://zlswi.baihongyu.com/

你可能感兴趣的文章
Using the Location Manager
查看>>
Obtaining the Current Location
查看>>
Displaying the Location Address
查看>>
Connecting to the Network
查看>>
Managing Network Usage
查看>>
Parsing XML Data
查看>>
Optimizing Downloads for Efficient Network Access
查看>>
Minimizing the Effect of Regular Updates
查看>>
Redundant Downloads are Redundant
查看>>
Modifying your Download Patterns Based on the Connectivity Type
查看>>
Supporting Different Screen Sizes支持不同的屏幕尺寸
查看>>
Supporting Different Densities 支持各种屏幕密度
查看>>
Implementing Adaptative UI Flows 实施自适应用户界面流程
查看>>
Crossfading Two Views 淡入淡出的两种观点
查看>>
Using ViewPager for Screen Slides 使用屏幕幻灯片ViewPager
查看>>
Displaying Card Flip Animations 显示卡片翻转动画
查看>>
Zooming a View 缩放视图
查看>>
Animating Layout Changes 动画布局的更改
查看>>
Controlling Your App’s Volume and Playback 控制应用程序的音量和播放
查看>>
Managing Audio Focus 管理音频焦点
查看>>