赞
踩
一、2022年省赛解析
第1题-分草莓
小明邀请了四个同学一起游玩,带了一盒草莓平均分给大家一起吃,任意输入草莓的数量n,输出每个人可以分到几颗草莓,最后剩下了几颗。
注意:
input()内不添加任何参数
只有完全正确才可提交,若无法点击提交说明答题存在错误,可及时进行检查并修改
输入样例:
28
输出样例::
5
3
[参考代码]:
# 将字符数字转成整数``n = int(input())``# 使用 //和 %运算符``print(n // 5)``print(n % 5)
第2题-商店结算
商店铅笔优惠销售标准:购买8支以内(含),每支售价0.8元,超过8支部分,每支售价0.7元。任意输入购买的铅笔总量n,输出总金额。
注意:
input()内不添加任何参数
只有完全正确才可提交,若无法点击提交说明答题存在错误,可及时进行检查并修改
输入样例:
11
输出样例:
8.5
[参考代码]:
# 将字符数字转成整数``n = int(input())``# 分两种情况进行计算``if n <= 8:` `print(n * 0.8)``else:` `print( 8 * 0.8 + (n - 8) * 0.7 )
第3题-数位输出
输入一个正整数n,如果是四位数,则分别输出这个数千位、百位,十位和个位分别为多少,如果是两位数,则输出个位数字是多少,如果不是两位或者四位数,则输出no。
注意:
input()内不添加任何参数
只有完全正确才可提交,若无法点击提交,说明答题存在错误,可及时进行检查并修改
输入样例1:
2345
输出样例:
2
3
4
5
输入样例2:
23
输出样例:
3
输入样例3:
666
输出样例:
no
[参考代码]:
n = input()``if len(n) == 2:` `print(n[-1])``elif len(n) == 4:` `print(n[0],n[1],n[2],n[3],sep="\n")``else:` `print("no")
在Python编程中,print函数可以输出多个内容,默认使用空格隔开,如果要使用其它符号,可以通过关键字参数sep来设置,"\n"是转义字符,表示换行。
第4题-打印星号
任意输入一个整数n,输出一个n行的的图案,每行都是由数字+空格+*号组成,*号后无空格。
注意:
input()内不添加任何参数
只有完全正确才可提交,若无法点击提交说明答题存在错误,可及时进行检查并修改
输入样例:
5
输出样例:
0*********
1 *******
2 *****
3 ***
4 *
[参考代码]:
n = int(input())``for i in range(n):` `print(i," " * i, "*" * (2 * (n - i) - 1), sep="")
当然了,如果你不知道或者不想使用print(“*” * 10)这种方式,也可以使用循环分别输出数字、空格和*。
for i in range(n):` `# 输出数字` `print(i,end="")` `# 输出空格` `for j in range(i):` `print(" ",end="")` `# 输出*` `for j in range(0,2 * (n - i) - 1):` `print("*",end="")` `# 换行` `print()
第5题-缺憾数
已知:缺憾数是指这个数加1之后一定可以表示成另一个数的平方的形式,比如8和99就是两个缺憾数:
8 + 1 = 3 ^ 2
99 + 1 = 10 ^ 2
任意输入两个正整数m和n,按顺序输出m和n这两个数字范围内所有的缺憾数。
注意:
input()内不添加任何参数
输入样例:
48
10
输出样例:
15
24
35
[参考代码]:
m = int(input())``n = int(input())`` ``for i in range(min(m,n), max(m,n)):` `# 计算开方数,并转成整数` `a = (i + 1) ** 0.5` `# 将a转成整数` `a = int(a)` `if i + 1 == a ** 2:` `# 输出数字` `print(i)
如果不熟悉**运算的话,可以使用循环逐个来判断,相对来说,代码会麻烦一些。
第6题-队列练习
同学们正在练习列队,从第一个人开始按编号1、2、…、n(n<1000)报数,开始所有人都是面向前方,第一遍报数是2的倍数的同学执行一遍向后转命令,第二遍报数是3的倍数的同学执行一遍向后转命令,第三遍报数是5的倍数的同学执行一遍向后转命令,输入人数n,按顺序输出最终仍然面向前方的同学的编号。
注意:
input()内不添加任何参数
只有完全正确才可提交,若无法点击提交说明答题存在错误,可及时进行检查并修改
输入样例:
10
输出样例:
1
6
7
10
[参考代码]:
# 获取输入,并转成整数``n = int(input())``# 初始化列表,默认都是-1,表示向前``direction = [-1] * n``# 第1遍报数,注意报数是从1开始的``for i in range(n):` `if (i + 1) % 2 == 0:` `direction[i] = 1``# 第2遍报数``for i in range(n):` `if (i + 1) % 3 == 0:` `direction[i] *= -1``# 第3遍报数``for i in range(n):` `if (i + 1) % 5 == 0:` `direction[i] *= -1`` ``# 输出值为-1是列表项``for i in range(n):` `if direction[i] == -1:` `print(i + 1)
二、2022年国赛解析
01-分苹果
把一堆苹果分给n个小朋友,每个人拿到的苹果数量不同,并且每个人至少有一个。任意输入小朋友的数量n,问这堆苹果至少应该有多少个。输入描述:任意输入小朋友的数量n输出描述:输出这堆苹果至少应该有多少个
样例输入:
3
样例输出:
6
注意:
input()内不添加任何参数;
只有完全正确才可提交,若无法点击提交说明答题存在错误,可及时进行检查并修改。
【参考答案】本题思路比较简单,n个小朋友,每个小朋友得到的苹果数分别为1,2,3,…,n,因此,本题实际上是求解1+2+3+…+n的和。
02-韩信点兵
韩信点兵又称为中国剩余定理,相传汉高祖刘邦问大将军韩信统御士兵多少,韩信答说,每3人一列余2人、5人一列余4人、7人一列余6人。
输入任意一个数字n(0<=n<=10000)表示刘邦总共的兵力,计算韩信可能统御的士兵数量并依次输出。
输入描述:输入任意一个数字n(0<=n<=10000)表示刘邦总共的兵力
输出描述:计算韩信可能统御的士兵数量并依次输出,每行一个,从小到大
样例输入:500
样例输出:
104
209
314
419
注意:input()内不添加任何参数只有完全正确才可提交,若无法点击提交说明答题存在错误,可及时进行检查并修改。
【参考答案】本题直接用枚举法,求出同时满足3个条件的整数即可。
03-借书问题
小明家里有很多不同的趣味书籍,有3个好朋友每人来借—本书(同—本书一次不能借给两个人)任意输入书籍的数量n(3<=n<=100),输出在所有的书籍中,找3本书给3个人有多少种不同的排列组合方法输入描述:
任意输入书籍的数量n(3<=n<=100)
输出描述:
输出在所有的书籍中,找3本书给3个人有多少种不同的排列组合方法
样例输入:
3
样例输出:
6
注意:
input()内不添加任何参数
只有完全正确才可提交,若无法点击提交说明答题存在错误,可及时进行检查并修改。
【参考答案】本题为简单的排列问题,第1个人有n种选择,第2个人有n-1种选择,第3个人有n-2种选择,用乘法原理即可得到最后的组合方法数。
04-四位数密码
情报员使用4位数字来传递信息,同时为了防止信息泄露,需要将数字进行加密。数据加密的规则是:
1). 每个数字都进行如下处理:该数字加上5之后除以10的余数,替换原数字;
2). 将处理后第一位数字与第三位数字进行交换,第二位数字与第四位数字进行交换;
3). 现在任意输入一个四位数n(1000 <= n <= 9999),输出加密之后的数字。
输入描述:
一个四位数
输出描述:
加密后的四位数
样例输入:
1234
样例输出:
8967
注意:
input()内不添加任何参数
只有完全正确才可提交,若无法点击提交说明答题存在错误,可及时进行检查并修改。
**【参考答案】**本题直接用整除和求余的方法,分别将个、十、百、千位提取出来,再进行加密处理并输出即可。
05-邮票面值
我们在寄信的时候都要贴邮票,在邮局有一些小面值的邮票,通过这些小面值邮票中的一张或者几张的组合,可以满足不同邮件的不同邮资。
已知每个信封上最多能贴5张邮票,邮票的种类至少需要3种,任意输入一个数字n代表邮票的种类,然后依次输入n个数字代表不同种类的邮票面值,计算并输出每个信封上可以构成的邮资的最大值。
输入描述:
第一行输入一个数字n代表邮票的种类;
然后依次输入n行数字代表n个不同种类的邮票面值;
输出描述:
输出每个信封上可以构成的邮资的最大值。
样例输入:
4
1
2
3
4
样例输出:
17
**【参考答案】**本题需要理解最大邮资最大值的获取方法,5张邮资需要选取最大邮资3张,然后排第2大和第3大的邮资各1张进行组合,因此,需要对输入的内容放在列表中进行排序。
06-组合取球
一个箱子里面存放着50个球,其中10个红色,10个黄色,30个蓝色。
现在从箱子里面任意取n个球,计算并输出不同颜色的球的数量组合一共有多少种可能性。
输入描述:
一个数字n
输出描述:
一个数字,可能的组合总数
样例输入:
2
样例输出:
6
**【参考答案】**本题直接用枚举法求出所有满足条件的小球即可,和百钱百鸡比较像。
07-统计连续字符
依次输入一个字符串s与一个数字n,寻找字符串中所有连续出现n次的字符,统计符合要求的字符数量并输出。
例如输入abbcccdddd,输入2,字符串中连续出现2次的字符包括b、c、d这3种。
输入描述:
第一行一个字符串(保证有连续的n个字符)
第二行一个数字n
输出描述:
符合要求的字符数量
样例输入:
abbcccdddd
2
样例输出:
3
**【参考答案】**本题首先进行相同字符的统计,并且将符合要求的字符存放在列表中,这边要注意排除重复出现且都满足要求的字符,例如,输入aabbbaaa,那么连续出现2次的字符只有a和b。
08-n的n次方
当数字的位数高达上百位时,这样庞大的数字在计算机中的计算已经完全不能用简单的加减乘除来实现了,但是有时候对于这种高精度数字的处理也是编程中必不可缺的。
任意输入―个数字n (99999 < n < 999999),计算n的n次方(即连续n个n相乘)计算之后,最后的3位数字是多少。
输入描述:
―个数字n (99999 < n < 999999)
输出描述:
计算n的n次方(即连续n个n相乘)之后,最后的3位数字是多少
样例输入:
123456
样例输出:
856
**【参考答案】**本题可以不用高精度算法,直接每步骤输出结果,可以极大简化编程的难度。
09-海盗搜身
—群渔民被海盗抓住了,依次坐在编号为1~n的凳子上,其中有一个人身上有藏宝图。
现在海盗想要找那个身上带着宝藏的渔民,海盗先将1号凳子上面的人搜身,没找到就隔1个凳子,将3号凳子上面的人搜身,没找到就隔2个凳子,将6号凳子上面的人搜身。
以后每次多隔一个凳子去搜索…这样下去找了100次没找到,最终放弃了把渔民释放了。
任意输入一个数字n(5 <= n <= 20)代表渔民的数量,依次输出哪些编号的渔民不会被搜身。
输入描述:
任意输入一个数字n(5 <= n <= 20)代表渔民的数量
输出描述:
依次输出哪些编号的渔民不会被搜身,每行一个
样例输入:
10
样例输出:
2
4
7
9
**【参考答案】**本题属于约瑟夫问题的改编,对搜过身的数字需要进行标记,最后输出列表中未被搜身的值。
10-父与子
学校举办亲子运动会,所有的父亲一组,孩子一组,出场规则是:父亲组先派一个人上场之后孩子组才能派一个人上场,假设每队3个人,可能的出场策略包括5种:
父父父子子子
父父子子父子
父父子父子子
父子父父子子
父子父子父子
任意输入父子的对数n(3<=n<=15),计算并输出有多少种出场策略
注意:input()内不添加任何参数
只有完全正确才可提交,若无法点击提交说明答题存在错误,可及时进行检查并修改
【输入样例】
3
【输出样例】
5
**【参考答案】**本题可以采用搜索或者递归算法,递归算法求解理解相对较难,但解题思路比较简单:
三、2023年北京赛区复赛真题
四、2023年海南赛区复赛真题
【思路】这道题,看似很难,其实本质就是不改变奇数位或者偶数位,就没有代价,所以,无论多少个数,最终都可以通过无代价的方式,合并为2堆,一堆是奇数位,一堆是偶数位,最后的代价就是最后相邻的奇数堆和偶数堆合并产生的代价,因此,最终只要统计偶数和奇数的个数,取较小值就是最终的代价。例如,案例中的1 2 3,奇数位1 3的合并不需要代价,2进行合并时,代价为1.
五、2023年初赛真题
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。