第十三届蓝桥杯大赛软件赛省赛(Python大学A组)

05-12 1145阅读

2022年蓝桥杯  省赛真题

Python大学A组

        试题A:裁纸刀

        试题B:寻找整数

        试题C:质因数个数

        试题D:矩形拼接

        试题E:消除游戏

        试题F:重新排序

        试题G:全排列的价值

        试题H:最长不下降子序列

        试题I:最优清零方案

        试题J:数的拆分


试题A:裁纸刀     (5分)

【问题描述】

        小蓝有一个裁纸刀,每次可以将一张纸沿一条直线裁成两半,小蓝用一张纸打印出两行三列共6个二维码,至少使用九次裁出来,下图给出了一种裁法。

第十三届蓝桥杯大赛软件赛省赛(Python大学A组)

        在上面的例子中,小蓝的打印机没办法打印到边缘,所以边缘至少要裁4次。另外,小蓝每次只能裁一张纸,不能重季或者拼起来裁。如果小蓝要用一张纸打印出20行22列共440个二维码,他至少需要裁多少次?

【答案提交】

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

【解析与方法】

        一道简单的数学题 先看例子,边缘必须裁四次,然后得到两行三列共六张二维码。 横线5裁一次,竖线6 7 8 9各裁一次,加上裁边缘的四次,共九次。 也就是说,横向裁剪次数为【行数-1】次。 竖向裁剪次数为【(列数-1)*行数】次。 题目共20行22列,则次数为:4 + 19 + (21*20) = 443次。可以证明这种方法是裁剪次数最少的方法。所以当行数为20行、列数为22列的440个二维码最少需要:(20-1) + (22-1)*20   +  4   =  443

【Python程序代码】

print(20-1 + (22-1)*20 + 4)

最终结果:443


试题B:寻找整数     (5分)

【问题描述】

        有一个不超过10的17次方的正整数n,知道这个数除以2至49后的余数如下表所示,求这个正整数最小是多少?

第十三届蓝桥杯大赛软件赛省赛(Python大学A组)

【答案提交】

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

【解析与方法】

        首先比较明显可以看出这应该属于线性同余方程组求解的问题,题目已经表明有解,所以可以直接采用中国剩余定理来求解。

        首先明确所以的质数2~49的质数ai,以及对于的余数mi.

第十三届蓝桥杯大赛软件赛省赛(Python大学A组)

        可以等价于:

 第十三届蓝桥杯大赛软件赛省赛(Python大学A组)

第十三届蓝桥杯大赛软件赛省赛(Python大学A组)

        存在通解:

第十三届蓝桥杯大赛软件赛省赛(Python大学A组)

        令通解最小且符合条件:

第十三届蓝桥杯大赛软件赛省赛(Python大学A组)

        带入第一个式子得:

第十三届蓝桥杯大赛软件赛省赛(Python大学A组)

        即可以令m1 = a1k1+m1,a1 = k(a1a2)/d,继续迭代得到最终结果。

【Python程序代码】

import math
a = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47]
m = [1,2,4,4,0,10,0,18,15,16,27,22,1,11,5]
a1,m1 = a[0],m[0]
def extended_gcd(a, b):
    if b == 0:
        return a, 1, 0
    else:
        gcd, x, y = extended_gcd(b, a % b)
        return gcd, y, x - (a // b) * y
def mod(a,b):
    return ((a%b)+b)%b
for i in range(1,len(a)):
    d,k1,k2 = extended_gcd(a1,a[i])
    k1 = mod(k1*(m[i]-m1)//d,int(math.fabs(a[i]/d)))
    m1 = k1*a1 + m1
    a1 = int(math.fabs(a1//d*a[i]))
print(m1)

最终结果:2022040920220409


试题C:质因数个数     (10分) 

【题目描述】

        给定正整数n,请问有多少个质数是n的约数?

【输入格式】

        输入的第一行包含一个整数n。

【输出格式】

        输出一个整数,表示n的质数约数个数。

【样例输入】

396

【样例输出】

3

【测评用例与规模】

        对于30%的评测用例,1

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]