【蓝桥杯国赛真题】备战24天 Python

简介: 【蓝桥杯国赛真题】备战24天 Python

距离蓝桥杯24天

快和小郑一起努力,下面的题解都会很详细,如有疑惑评论欢迎指出!

坚持到最后!!!

1.💒神奇的的算式


8fc59aea64b345a38ab205475408bbd0.png

问题分析:左边的两个因数,长度只能是1,2,3其中之一,因此我们只需要枚举所有可能,加上判断即可(注意j>i,这样枚举所有情况的同时也能避免重复)


判断:条件1:左边两数的组成元素与右边结果的组成元素相同


条件2:右边结果长度为4,左边两数的组成元素互异


条件3:左右两数及右侧结果的数字 各自的组成元素不重复


tips:其实这些条件不是凭空想出来的,都是不断的尝试,发现错误,增加条件得到的。


参考代码(AC)

#1*3,2*2,2*3,
for i in range(1,1000):
    for j in range(i+1,1000):
        k=set(str(i*j))#右边数字的组成元素
        t=set(str(i)+str(j))#左边两数的组成元素
        if k==t:
            if len(k)==4 and not set(' '.join(str(i)).split())&set(' '.join(str(j)).split()):#结果4位且i,j组成数字互异
                if len(str(i))==len(set(str(i))) and len(str(j))==len(set(str(j))) and len(str(i*j))==len(set(str(i*j))):#确保i,j,i*j由不同数字组成        
                    print(i,j,i*j)
#数一下,一共12种

2.🌻逐位求和


731f4aaa2c4449c4b89bca9886e0c159.png

问题分析: 签到题了,利用递归:每次遍历字符串,int字符元素并相加后再次调用自身,直至长度为1

参考代码(AC)

n=input()
def f(n):
    if len(n)==1:
        print(n)
    else:
        m=0
        for i in n:
            m+=int(i)
        return f(str(m))
f(n)

3.🌟最大乘积


907c877b5c014ad9b67cba4bbaee2570.png

问题分析:这道题和第1题有相像。左边两个数字相乘最大不会超过999890001


因为你可以去尝试一下对于字符串'999999999'无论你怎么分割,得到的两个数字相乘后都不会超过哈。因而逆序循环,如果有因子(类似于判断质数),并符合判断条件,输出。


判断条件的设定:因子不含0且不重复,右侧的结果互异数字且长度9,左侧的两个因子合并后互异且长度为9


跑个大概5分钟吧结果出来(.....)


#839542176答案
def judge(x):
    s=[]
    for i in str(x):
        if i not in s and i!='0':
            s.append(i)
        else:
            return False
    return True
def g(x,y,z):
    if not set(str(x))&set(str(y)):
        if judge(z) and len(set(str(z)))==9:
            return True
    return False
def f(x):
    for i in range(999890001,-1,-1):
        if judge(i):
            for j in range(1,int(i**0.5)+1):
                if i%j==0:
                    if judge(j) and judge(i//j) and g(j,i//j,i):
                        print(i,j,i//j)
                        return 0

4.💒含2天数

ea39242c075f4ed9b1cb3fe647595b0a.png

参考代码(AC)

import datetime
st=datetime.date(1900,1,1)
delta=datetime.timedelta(days=1)
end=datetime.date(9999,12,31)
cnt=0
while st<=end:
    if '2' in str(st.year) or '2' in str(st.month) or '2' in str(st.day):
        cnt+=1
    try:
        st+=delta
    except:
        print(cnt)
        break

问题分析:考察datetime模块的使用  提取年,月,日 ,转化为字符串 ,如果存在‘2’,那么累加


注意except那里:由于datetime模块的年最大是9999,当st.year=9999,累加delta后会报错,实际上这时候也已经遍历完所有日期,直接输出cnt即可


5.🌟阶乘约数

9edd7ed0cb584290ad40a3b22f4ac689.png

问题分析:考察数学定理,唯一分解定理:任何一个大于1的整数n都可以分解成若干个素因数的连乘积,如果不计各个素因数的顺序,那么这种分解是惟一的


举个例子,比如4!=24=2*2*2*3,2和3都是质数,那么问,4!即24有多少个正约数


第一种办法:枚举,直接数:1,2,3,4,6,8,12,24 ,显然有8个


第二种办法:24=(2^3)*(3^1) ,把每一项的指数取下来,各自+1,并相乘


即(3+1)*(1+1)=8种


原理:第一个括号内,即2^3,一共有4个因子,为什么?


因为可以把它列出来:2^0,2^1,2^2,2^3,


同理 3^1一共有2个因子,可以把它列出来:3^0,3^1,


那么根据乘法计数原理,原数就有4*2=8种因子


但一个细节的地方:我们需要保证因子之间互异,即在刚刚的例子里面,对于2^4,任意抽取一个因子,与3^1中的任意一个因子相乘,结果一定在所有的因子中(8种里面)是唯一的。



下面证明一定是互异的:假设n>1,将其分解,38aa7ca56cf4416db6e64fa2843f6fce.png


p1,p2,..pk都是质数,指数>=0,那么p1^α1有(α1+1)个因子


同理...pk^αk有(αk+1)个因子


从 p1^α1取一个因子a出来...一直到从..pk^αk取一个因子k出来,得到一条因子序列,最后把它相乘,会得到一个n的因子w。对于这个n的因子w,它是由若干个素因数连乘积得到,由定理可知,这种分解是唯一的,即w只能是由这条因子序列相乘得到。要证w是唯一的,即证这条因子序列是唯一的,显然,当我们对于(p1到pk),这每个质数选取一定的指数,那么这个序列必然是唯一的。证毕。


对于本题,就是要把100!分解成若干个质数相乘


我们可以直接分解:下面给出把n(>2)分解成若干个质数的板子

n=int(input())
i=2
s=[]
while i<=n:
    if n%i==0:
        s.append(i)
        n//=i
    else:
        i+=1
print(s)

04fe5480774f463385f183f5abacebad.png

但是对于本题不适用,因为100!太大了,跑不出来的。


转化一下思路:把100!看作100个数字相乘,即1*2*3..100


在对这100数字每个数进行质数分解即


100!=(1)*(2)*(3)*(2*2)*(5)*(2*3).....(2*2*5*5)


那么这样子,只需要遍历每个数字,碰到一个因子,就将其次数+1


比如一开始我们假设100!可以分解为m个2的乘积,


那我们只需要统计等式右边所有括号内2出现的总次数即得到m


参考代码(AC)

m=[1 for i in range(101)]#m[i]:表示质数i出现的次数,初始化1表示不选的情况
for i in range(1,101):
    j=2
    s=[]
    tmp=i
    while j<=tmp:
        if tmp%j==0:
            m[j]+=1
            tmp//=j
            s.append(j)
        else:
            j+=1
ans=1
for i in m:
    ans*=i
print(ans)

学习犹如逆水行舟不进则退 祝大家都能在蓝桥杯省赛中取得理想成绩

有什么不懂的欢迎留言指出!

相关文章
|
1月前
|
Python
蓝桥杯练习题(一):Python组之入门训练题
这篇文章是关于蓝桥杯Python组的入门训练题,包括Fibonacci数列、圆的面积、序列求和和A+B问题的具体代码实现和样例输出。
119 0
|
1月前
|
存储 机器学习/深度学习 算法
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
蓝桥杯Python编程练习题的集合,涵盖了从基础到提高的多个算法题目及其解答。
60 3
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
|
1月前
|
人工智能 Python
蓝桥杯练习题(四):Python组之历届试题三十题
关于蓝桥杯Python组历届试题的三十个练习题的总结,包括题目描述、输入输出格式、样例输入输出以及部分题目的解题思路和代码实现。
30 0
蓝桥杯练习题(四):Python组之历届试题三十题
|
1月前
|
存储 机器学习/深度学习 算法
蓝桥杯练习题(二):Python组之基础练习三十题
蓝桥杯Python编程练习题的集合,包含了三十个不同难度的编程题目,覆盖了基础语法、数据结构和算法等领域。
29 0
|
5天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
5天前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!
|
5天前
|
存储 Python
Python编程入门:打造你的第一个程序
【10月更文挑战第39天】在数字时代的浪潮中,掌握编程技能如同掌握了一门新时代的语言。本文将引导你步入Python编程的奇妙世界,从零基础出发,一步步构建你的第一个程序。我们将探索编程的基本概念,通过简单示例理解变量、数据类型和控制结构,最终实现一个简单的猜数字游戏。这不仅是一段代码的旅程,更是逻辑思维和问题解决能力的锻炼之旅。准备好了吗?让我们开始吧!
|
7天前
|
设计模式 算法 搜索推荐
Python编程中的设计模式:优雅解决复杂问题的钥匙####
本文将探讨Python编程中几种核心设计模式的应用实例与优势,不涉及具体代码示例,而是聚焦于每种模式背后的设计理念、适用场景及其如何促进代码的可维护性和扩展性。通过理解这些设计模式,开发者可以更加高效地构建软件系统,实现代码复用,提升项目质量。 ####
|
6天前
|
机器学习/深度学习 存储 算法
探索Python编程:从基础到高级应用
【10月更文挑战第38天】本文旨在引导读者从Python的基础知识出发,逐渐深入到高级编程概念。通过简明的语言和实际代码示例,我们将一起探索这门语言的魅力和潜力,理解它如何帮助解决现实问题,并启发我们思考编程在现代社会中的作用和意义。
|
6天前
|
机器学习/深度学习 数据挖掘 开发者
Python编程入门:理解基础语法与编写第一个程序
【10月更文挑战第37天】本文旨在为初学者提供Python编程的初步了解,通过简明的语言和直观的例子,引导读者掌握Python的基础语法,并完成一个简单的程序。我们将从变量、数据类型到控制结构,逐步展开讲解,确保即使是编程新手也能轻松跟上。文章末尾附有完整代码示例,供读者参考和实践。