备战蓝桥杯|【蓝桥python冲刺31天】——拿下数论,冲进国赛

备战蓝桥杯|【蓝桥python冲刺31天】——拿下数论,冲进国赛
文章图片
小蓝刷题,每日一练,陪你一起,冲进国赛! 备战蓝桥杯|【蓝桥python冲刺31天】——拿下数论,冲进国赛
文章图片
备战蓝桥杯|【蓝桥python冲刺31天】——拿下数论,冲进国赛
文章图片


目录
真题Ⅰ:猴子分香蕉
题目
题解
代码
真题Ⅱ:等差数列
题目
题解
代码
真题Ⅲ:平方序列
题目
题解
代码
真题Ⅳ:倍数问题
题目
题解
代码

真题Ⅰ:猴子分香蕉 题目 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
5 只猴子是好朋友,在海边的椰子树上睡着了。这期间,有商船把一大堆香蕉忘记在沙滩上离去。
第 1 只猴子醒来,把香蕉均分成 5 堆,还剩下 1个,就吃掉并把自己的一份藏起来继续睡觉。
第 2 只猴子醒来,把香蕉均分成 5 堆,还剩下 2 个,就吃掉并把自己的一份藏起来继续睡觉。
第 3 只猴子醒来,把香蕉均分成 5 堆,还剩下 3 个,就吃掉并把自己的一份藏起来继续睡觉。
第 4 只猴子醒来,把香蕉均分成 5 堆,还剩下 4 个,就吃掉并把自己的一份藏起来继续睡觉。
第 5 猴子醒来,重新把香蕉均分成 5 堆,哈哈,正好不剩!
请计算一开始最少有多少个香蕉。
题解 难度系数:?
考察题型:填空题, 2018, 国赛
涉及知识点:数论-基础

「思路详解」
1、整体很简单,就是模拟香蕉数量的划分~
因为只有5只猴子,数据比较小,所以嵌套个5层if,筛选满足条件的香蕉数。
2、题目中要求:“请计算一开始最少有多少个香蕉。”
最后输出会发现有一万以内的有16,3141,6266,9391这四个数。
16一看就感觉不太对,检验发现,到第5个猴子时已经没香蕉吃了···果断排除。
下一个数3141,发现刚好满足条件,就它了!直接print(3141)一行搞定!
代码
#数论-猴子分香蕉 for i in range(1,10000):#枚举香蕉数 t=i#临时变量t=i if (t-1)%5==0:#吃掉1个香蕉,还能被均分成5堆 t=0.8*(t-1)#剩下的香蕉总数 if (t-2)%5==0: t=0.8*(t-2) if (t-3)%5==0: t=0.8*(t-3) if (t-4)%5==0: t=0.8*(t-4) if t%5==0: print(i)#16 3141 6266 9391 #print(3141)

备战蓝桥杯|【蓝桥python冲刺31天】——拿下数论,冲进国赛
文章图片

真题Ⅱ:等差数列 题目 数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一部分的数列,只记得其中 N 个整数。
现在给出这 N 个整数,小明想知道包含这 N 个整数的最短的等差数列有几项?
输入描述
备战蓝桥杯|【蓝桥python冲刺31天】——拿下数论,冲进国赛
文章图片

输出描述
输出一个整数表示答案。
输入
5 2 6 4 10 20

输出
10

题解 难度系数:??
考察题型:数学, 2019, 省赛
涉及知识点:数论-全排列
「思路详解」
1、先把数列从小到大的存到列表a里,a=[2, 4, 6, 10, 20]。
2、然后寻找最小的公差,初始化公差minx为无穷大∞,
遍历列表a,如果遇到更小的公差就迭代minx。
3、找到公差后,你是否考虑了公差为0的情况呢?
这是个隐藏的大坑,小蓝一开始不注意就掉下去了!
所以要加上分类判断if else 就满分了!
代码
#数论-等差数列 n=int(input())#5 a=sorted(list(map(int,input().split())))#a=[2, 4, 6, 10, 20] minx=float("inf")#最小公差初始化 for i in range(len(a)-1):#0 1 2 3 4 if a[i+1]-a[i]

备战蓝桥杯|【蓝桥python冲刺31天】——拿下数论,冲进国赛
文章图片

真题Ⅲ:平方序列 题目 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小明想找到两个正整数 XX 和 YY,满足
备战蓝桥杯|【蓝桥python冲刺31天】——拿下数论,冲进国赛
文章图片

请你求出在所有可能的解中,X + Y 的最小值是多少?
题解 难度系数:?
考察题型:填空题, 2019, 国赛
涉及知识点:数论-等差数列
「思路详解」
炒鸡简单的国赛打卡题!
遍历尽可能多的的x和y,满足题目的两个条件就输出,
其中最小的那一个就是答案了。
本题涉及等差数列的一个公式:
举个栗子:如果有等差数列 a ,b ,c那么就存在 2*b = a+c
代码
#数论-平方序列 for x in range(2020,10000): for y in range(2021,10000): if 2019

备战蓝桥杯|【蓝桥python冲刺31天】——拿下数论,冲进国赛
文章图片

真题Ⅳ:倍数问题 题目 众所周知,小葱同学擅长计算,尤其擅长计算一个数是否是另外一个数的倍数。但小葱只擅长两个数的情况,当有很多个数之后就会比较苦恼。现在小葱给了你 n 个数,希望你从这 n 个数中找到三个数,使得这三个数的和是 K 的倍数,且这个和最大。数据保证一定有解。
输入描述
备战蓝桥杯|【蓝桥python冲刺31天】——拿下数论,冲进国赛
文章图片

输出描述
输出一行一个整数代表所求的和。
输入
4 3 1 2 3 4

输出
9

题解 难度系数:???
考察题型:数论, 构造, 2018, 省赛
涉及知识点:数论-倍数
「思路详解」
省赛的倒数第二题,有亿点点难~
如果实在没啥思路,可以像小蓝一样,选择暴力枚举,混个30分,嘻嘻q(≧▽≦q)
具体这么想:先用python自带的 itertools 模块的组合数函数 combinations 遍历,
然后对它们的和 cnt 取模 % ,判断是否是倍数关系,迭代最大和 maxum。
得到评论区执梗大佬的提醒,优化暴力思路:(输入的数从大到小排序)
最后打印输出就了(≧?≦)ゞ
代码
#数论-倍数问题-暴力枚举版 from itertools import combinations#组合数函数 n,k=map(int,input().split())#n=4 k=3 a=sorted(list(map(int,input().split())),reverse=True) maxsum=0#a=[4,3,2,1] for i in combinations(a,3):#i=(4, 3, 2) cnt=i[0]+i[1]+i[2]#4+3+2 if cnt%k==0:#9%3==0 if cnt>maxsum:#9>6 maxsum=cnt#9 print(maxsum)#9

备战蓝桥杯|【蓝桥python冲刺31天】——拿下数论,冲进国赛
文章图片

满分思路可参考:蓝桥冲刺31天,第五天java打卡_小怂很怂的博客-CSDN博客
备战蓝桥杯|【蓝桥python冲刺31天】——拿下数论,冲进国赛
文章图片
备战蓝桥倒数28天,我们一起,保底省一,冲进国赛!备战蓝桥杯|【蓝桥python冲刺31天】——拿下数论,冲进国赛
文章图片
【备战蓝桥杯|【蓝桥python冲刺31天】——拿下数论,冲进国赛】备战蓝桥杯|【蓝桥python冲刺31天】——拿下数论,冲进国赛
文章图片

    推荐阅读