刷题日记?刷题日寄!
萌新备战蓝桥杯python组
发现有需要纠正的地方,烦请指正!
欢迎小伙伴们的三连+关注!
往期系列:
【蓝桥杯入门篇】Python组刷题日寄Part01
【蓝桥杯入门篇】Python组刷题日寄Part02
【蓝桥杯入门篇】Python组刷题日寄Part03
【蓝桥杯入门篇】Python组刷题日寄Part04
【蓝桥杯入门篇】Python组刷题日寄Part05
简单篇01
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
输入描述:
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0
对于每个测试实例,输出在第n年的时候母牛的数量。每个输出占一行。
样例输入:
2
4
5
0
样例输出:
2
4
6
答案:
分析:
前3年奶牛数量为:1,2,3
从第4年开始:当前年份奶牛数量 = 前一年奶牛数量 + 新出生奶牛数量
;
而新出生奶牛数量满足:新出生奶牛数量 = 3年前奶牛数量
;
因此:当前年份奶牛数量 = 前一年奶牛数量 + 3年前奶牛数量
;
def main():
list = [] # 定义列表
list.append(0) # 往list添加初始数据
list.append(1) # 第一年奶牛数量为1
list.append(2) # 第一年奶牛数量为2
list.append(3) # 第一年奶牛数量为3
for i in range(4, 55): # 预处理前55年的奶牛数量
list.append(list[i - 1] + list[i - 3])
while True:
n = int(input()) # 化为整型
if n == 0: # n == 0 时退出
break
print(list[n]) # 直接输出
if __name__ == '__main__':
main()
题目:
时间限制:
1s
内存限制:
64MB
题目描述:
将一个字符串str的内容颠倒过来,并输出。str的长度不超过100个字符。
输入描述:
输入包括一行。 第一行输入的字符串。
输出描述:
输出转换好的逆序字符串。
样例输入:
I am a student
样例输出:
tneduts a ma I
答案:
分析:
直接运用python字符串切片功能进行反转
def main():
x = input("")
x = x[::-1] # 列表切片,逆序输出
print(x)
if __name__ == '__main__':
main()
题目:
时间限制:
1s
内存限制:
64MB
题目描述:
用筛选法求之N内的素数。
输入描述:
N
输出描述:
0~N的素数
样例输入:
10
样例输出:
2
3
5
7
答案:
分析:
素数即为除1与其本身外,无法被整除的数。
我们可以借助嵌套循环的方式来筛选。
即第一层循环取假定的素数值 i,第二次循环取 2 到 i 之间数值 j,来判断 i % j 是否为0。
若为0,则break循环;不为0,继续直至所有 i 的取值全判断完。
def main():
n = int(input())
for i in range(2, n):
for j in range(2, i):
if i % j == 0:
break
else:
print(i)
if __name__ == '__main__':
main()
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的。这样的数字叫做:回文数字。
本题要求你找到一些5位或6位的十进制数字。满足如下要求:
该数字的各个数位之和等于输入的整数。
输入描述:
一个正整数 n (10< n< 100), 表示要求满足的数位和。
输出描述:
若干行,每行包含一个满足要求的5位或6位整数。
数字按从小到大的顺序排列。
如果没有满足条件的,输出:-1 .
样例输入:
44
样例输出:
99899
499994
589985
598895
679976
688886
697796
769967
778877
787787
796697
859958
868868
877778
886688
895598
949949
958859
967769
976679
985589
994499
答案:
分析:
本题我们可以从数位来判断,分两种情况:
五位数:设个位和万位的数为 i;十位和千位的数为 j;百位为k——ijkji。从k入手判断。
五位数:设个位和十万位的数为 i;十位和万位的数为 j;百位和千位为k——ijkkji。从k入手判断。
def main():
n = int(input())
flag = False
for i in range(1, 10):
for j in range(0, 10):
k = n - 2 * i - 2 * j
if k >= 0 and k < 10:
print(i * 10000 + j * 1000 + k * 100 + j * 10 + i)
flag = True
for i in range(1, 10):
for j in range(0, 10):
k = n - 2 * i - 2 * j
if (k % 2 == 0 and k // 2 < 10) and k // 2 >= 0:
print(i * 100000 + j * 10000 + (k // 2) * 1000 + (k // 2) * 100 + j * 10 + i)
flag = True
if flag == False:
print(-1)
if __name__ == '__main__':
main()
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:
每个小朋友都把自己的糖果分一半给左手边的孩子。
(不妨假设:2号给1号,3号给2号,以此类推)
一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。
反复进行这个游戏,直到所有小朋友的糖果数都相同为止。
你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。
输入描述:
程序首先读入一个整数N(2< N< 100),表示小朋友的人数。
接着是一行用空格分开的N个偶数(每个偶数不大于1000,不小于2)
输出描述:
要求程序输出一个整数,表示老师需要补发的糖果数。
样例输入:
3
2 2 4
样例输出:
4
答案:
分析:
这道题目要注意一个问题,我们可以使用列表来存储数据,那么当小朋友交换糖果的时候,首尾的数据传递是关键。
首先定义一个n来表示小朋友数。
suger来定义一组输入,存储发放的糖果数。
定义一个变量来存储老师要发放的糖果数量。
通过一个while循环,判断结束的条件为suger内的元素都相等。
循环体内首先通过一层for循环把小朋友的糖果数量都减半。
然后再通过一层循环来完成小朋友糖果的传递。
注意首尾即可。
最后再通过一层循环完成老师发放糖果。
def main():
n = int(input())
suger = list(map(int, input().split()))
give = 0 # 给出的糖果
while True:
for i in range(n):
suger[i] /= 2 # 都先拿出一半
for i in range(n): # 获得别人给出的糖果
if i == 0:
number = suger[n - 1]
suger[n - 1] += suger[0]
elif i == n - 1:
suger[i - 1] += number
else:
suger[i - 1] += suger[i]
for i in range(n): # 不是偶数,给出一颗
if suger[i] % 2 != 0:
suger[i] += 1
give += 1
# 用集合判断
# 集合中不允许出现重复元素,因此糖果数全部相同时集合中只有一个元素
s = len(set(suger))
if s <= 1:
break
# 最终输出给出的数量give
print(give, end='')
if __name__ == '__main__':
main()
题目:
时间限制:
1s
内存限制:
256MB
题目描述:
给定 n, m ,问是否存在两个不同的数 x, y 使得 1 ≤ x < y ≤ m 且 n mod x = n mod y
输入描述:
输入包含多组独立的询问。
第一行包含一个整数 T 表示询问的组数。
接下来 T 行每行包含两个整数 n, m,用一个空格分隔,表示一组询问。
输出描述:
输出 T 行,每行依次对应一组询问的结果。如果存在,输出单词 Yes;如果不存在,输出单词 No。
样例输入:
3
1 2
5 2
999 99
样例输出:
No
No
Yes
答案:
分析:
def main():
num = int(input())
for i in range(num):
n, m = map(int, input().split())
key = 1
for x in range(1, m):
for y in range(x + 1, m + 1):
if n % x == n % y:
print('Yes')
key = 0
break
if key == 0:
break
if key == 1:
print('No')
if __name__ == '__main__':
main()
题目:
时间限制:
1s
内存限制:
256MB
题目描述:
小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示:
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。
提示:请仔细观察样例,尤其要注意句点的数量和输出位置。
输入描述:
一个正整数 n (n< 30) 表示要求打印图形的层数。
输出描述:
对应包围层数的该标志。
样例输入:
3
样例输出:
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
答案:
分析:
def function(n):
A = [['.' for j in range(5 + 4 * n)] for i in range(5 + 4 * n)]
if n == 0:
for i in range(5):
A[2][i] = '$'
A[i][2] = '$'
for k in range(3):
x = int((5 + 4 * n + 1) / 2) - 1
y = int((5 + 4 * n + 1) / 2) - 1 - k
A[x][y] = '$'
xmove = x
ymove = y
for kk in range(n):
xmove = xmove - 2
ymove = ymove - 2
A[xmove][ymove] = '$'
for k in range(3):
x = int((5 + 4 * n + 1) / 2) - 1 - k
y = int((5 + 4 * n + 1) / 2) - 1
A[x][y] = '$'
xmove = x
ymove = y
for kk in range(n):
xmove = xmove - 2
ymove = ymove - 2
A[xmove][ymove] = '$'
for i in range(1, n + 1):
num = 2 * i
x = int((5 + 4 * n + 1) / 2) - 1 - 2 - num
y = int((5 + 4 * n + 1) / 2) - 1
xmove = x
ymove = y
for j in range(num):
A[xmove][ymove] = '$'
xmove = xmove
ymove = ymove - 1
for i in range(1, n + 1):
num = 2 * i
x = int((5 + 4 * n + 1) / 2) - 1
y = int((5 + 4 * n + 1) / 2) - 1 - 2 - num
xmove = x
ymove = y
for j in range(num):
A[xmove][ymove] = '$'
xmove = xmove - 1
ymove = ymove
for j in range(int((5 + 4 * n + 1) / 2)):
for i in range(int((5 + 4 * n + 1) / 2) - 2, -1, -1):
A[5 + 4 * n - 1 - i][j] = A[i][j]
for i in range(5 + 4 * n):
A[i][int((5 + 4 * n + 1) / 2):] = A[i][int((5 + 4 * n + 1) / 2) - 2::-1]
for i in range(5 + 4 * n):
for j in range(5 + 4 * n):
print(A[i][j], end='')
print()
if __name__ == '__main__':
n = int(input())
function(n)
题目:
时间限制:
1s
内存限制:
64MB
题目描述:
栋栋正在和同学们玩一个数字游戏。
游戏的规则是这样的:栋栋和同学们一共n个人围坐在一圈。栋栋首先说出数字1。接下来,坐在栋栋左手边的同学要说下一个数字2。再下面的一个同学要从上一个同学说的数字往下数两个数说出来,也就是说4。下一个同学要往下数三个数,说7。依次类推。
为了使数字不至于太大,栋栋和同学们约定,当在心中数到 k-1 时,下一个数字从0开始数。例如,当k=13时,栋栋和同学们报出的前几个数依次为:
1, 2, 4, 7, 11, 3, 9, 3, 11, 7。
游戏进行了一会儿,栋栋想知道,到目前为止,他所有说出的数字的总和是多少。
样例说明
栋栋说出的数依次为1, 7, 9,和为17。
输入描述:
输入的第一行包含三个整数 n,k,T,其中 n 和 k 的意义如上面所述,T 表示到目前为止栋栋一共说出的数字个数。
数据规模和约定
1 < n,k,T < 1,000,000;
输出描述:
输出一行,包含一个整数,表示栋栋说出所有数的和。
样例输入:
3 13 3
样例输出:
17
答案:
分析:
def main():
L = [int(i) for i in input().split()]
n = L[0]
k = L[1]
t = L[2]
s = [1 for i in range(t)]
re = 0
m = 0
for j in range(1, n + 1):
m += j
for i in range(1, t):
s[i] = (s[i - 1] + m + n * n * (i - 1)) % k
re += s[i]
print(re + 1)
if __name__ == '__main__':
main()
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
长100厘米的细长直杆子上有n只蚂蚁。它们的头有的朝左,有的朝右。
每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒。
当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。
这些蚂蚁中,有1只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。
请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒。
输入描述:
第一行输入一个整数n (1 < n < 50), 表示蚂蚁的总数。
接着的一行是n个用空格分开的整数 Xi (-100 < Xi < 100), Xi的绝对值,表示蚂蚁离开杆子左边端点的距离。正值表示头朝右,负值表示头朝左,数据中不会出现0值,也不会出现两只蚂蚁占用同一位置。其中,第一个数 据代表的蚂蚁感冒了。
输出描述:
要求输出1个整数,表示最后感冒蚂蚁的数目。
样例输入:
5
-10 8 -20 12 25
样例输出:
3
答案:
分析:
def main():
n = int(input())
s = t = 0
ls = [int(i) for i in input().split()]
k = abs(ls[0])
for i in ls[1:]:
if (0 < i < k):
s += 1
if (i < 0 and abs(i) > k):
t += 1
if ((ls[0] < 0 and s != 0) or (ls[0] > 0 and t != 0)):
print(s + t + 1)
else:
print("1")
if __name__ == '__main__':
main()
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
小张是软件项目经理,他带领3个开发组。工期紧,今天都在加班呢。为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑)。他的要求是:
输入描述:
输入包含三个正整数a, b, c,表示每个组正在加班的人数,用空格分开(a,b,c< 30)
输出描述:
输出一个正整数,表示每袋核桃的数量。
样例输入:
2 4 5
样例输出:
20
答案:
分析:
枚举出所有符合条件的值
找出最小值
def main():
a, b, c = map(int, input().split())
list = []
if a < 30 and b < 30 and c < 30:
sum = a * b * c
for i in range(1, sum + 1):
if i % a == 0 and i % b == 0 and i % c == 0:
list.append(i)
print(list[0])
if __name__ == '__main__':
main()