【蓝桥刷题】——如何轻松拿捏必考数论题?(第二弹)

  小蓝刷题,每日一练,陪你一起,冲进国赛! 


目录

🏆真题Ⅰ:猴子分香蕉

🔎题目

📖题解

🍞代码

🏆真题Ⅱ:等差数列

🔎题目

📖题解

🍞代码

 🏆真题Ⅲ:平方序列

🔎题目

📖题解

🍞代码

🏆真题Ⅳ:倍数问题

🔎题目

📖题解

🍞代码


🏆真题Ⅰ:猴子分香蕉

🚀传送锚点

🔎题目

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

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)                                     


🏆真题Ⅱ:等差数列

🚀传送锚点

🔎题目

数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一部分的数列,只记得其中 N 个整数。

现在给出这 N 个整数,小明想知道包含这 N 个整数的最短的等差数列有几项?

输入描述

输出描述

输出一个整数表示答案。

输入

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 
    if a[i+1]-a[i]<minx:                  #寻找最小公差
        minx=a[i+1]-a[i]
if minx==0:                               #特殊情况公差为0
    print(len(a))                         #a=[1,1,1] 3
else:                                     #公差不为0
    cnt=1
    for i in range(a[0],a[-1],minx):      #遍历数列
        cnt+=1                            #计数
    print(cnt)                            #10


 🏆真题Ⅲ:平方序列

🚀传送锚点

🔎题目

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

小明想找到两个正整数 X 和 Y,满足

请你求出在所有可能的解中,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<x<y and 2*x*x==y*y+2019*2019:
            print(x+y)#7020 14190
#print(7020)


🏆真题Ⅳ:倍数问题

🚀传送锚点

🔎题目

众所周知,小葱同学擅长计算,尤其擅长计算一个数是否是另外一个数的倍数。但小葱只擅长两个数的情况,当有很多个数之后就会比较苦恼。现在小葱给了你 n 个数,希望你从这 n 个数中找到三个数,使得这三个数的和是 K 的倍数,且这个和最大。数据保证一定有解。

输入描述

输出描述

输出一行一个整数代表所求的和。

输入

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

满分思路可参考:蓝桥冲刺31天,第五天java打卡_小怂很怂的博客-CSDN博客 


 备战蓝桥倒数28天,我们一起,保底省一,冲进国赛!

  • 25
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蓝刷题

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值