刷题日记?刷题日寄!
萌新备战蓝桥杯python组
发现有需要纠正的地方,烦请指正!
欢迎小伙伴们的三连+关注!
往期系列:
【蓝桥杯入门篇】Python组刷题日寄Part01
入门篇02
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。
输入描述:
初始人数n
输出描述:
最后一人的初始编号
样例输入:
3
样例输出:
2
答案:
分析:
本题原型为约瑟夫环,利用其原理设计代码
n = int(input())
x = 0
for i in range(1, n+1):
x = (x+3)%i
print(x+1)
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
输入三个字符串,按由小到大的顺序输出
输入描述:
3行字符串
输出描述:
按照从小到大输出成3行
样例输入:
cde
afg
abc
样例输出:
abc
afg
cde
答案:
分析:
利用sort()
函数
s = [0 for i in range(3)]
for i in range(3):
s[i] = input().split()
s.sort()
for i in s:
for j in i:
print(j, end='')
print()
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。
输入描述:
两个数
输出描述:
最大公约数 最小公倍数
样例输入:
6 15
样例输出:
3 30
答案:
分析:
def func1(a, b):
if a<b:
c = a
a = b
b = c
r = a%b
while(r != 0):
a = b
b = r
r = a%b
return b
def func2(m, b):
n = m/b
return n
if __name__ == '__main__':
a, b = map(int, input().split())
m = a*b
b = func1(a, b)
n = func2(m, b)
print(b, int(n))
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
用选择法对10个整数从小到大排序。
输入描述:
输入10个无序的数字
输出描述:
排序好的10个整数
样例输入:
4 85 3 234 45 345 345 122 30 12
样例输出:
3
4
12
30
45
85
122
234
345
345
答案:
分析:
使用内置函数sort()进行排序
nums = list(map(int, input().split()))
nums.sort()
for i in nums:
print(i)
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
用迭代法求 平方根
公式:求a的平方根的迭代公式为: X[n+1]=(X[n]+a/X[n])/2 要求前后两次求出的差的绝对值少于0.00001。 输出保留3位小数
输入描述:
X
输出描述:
X的平方根
样例输入:
4
样例输出:
2.000
答案:
分析:
a = int(input())
b = a/2
c = (b+a/b)/2
while abs(b-c)>=0.0001:
b = c
c = (b+a/b)/2
print('{:.3f}'.format(c))
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
一个数如果恰好等于不包含它本身所有因子之和,这个数就称为"完数"。 例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。 编程序找出N之内的所有完数,并按下面格式输出其因子
输入描述:
N
输出描述:
? its factors are ? ? ?
样例输入:
1000
样例输出:
6 its factors are 1 2 3
28 its factors are 1 2 4 7 14
496 its factors are 1 2 4 8 16 31 62 124 248
答案:
分析:
from math import sqrt
n = int(input())
for i in range(2, n):
l = [1]
a = 1
for j in range(2, int(sqrt(i))+1):
if a>i:
break
else:
if i%j==0:
l.append(j)
l.append(int(i/j))
a = a+j+int(i/j)
if a==i:
print(i, 'its factors are', ' '.join(str(k) for k in sorted(set(l))))
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字(n不超过20)。
输入描述:
n
输出描述:
Sn的值
样例输入:
5
样例输出:
153
答案:
分析:
n=int(input())
s=1
Sn=0
for i in range(1,n+1):
s=s*i
Sn=Sn+s
print(Sn)
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
编写一个函数,输入一行字符,将此字符串中最长的单词输出。
输入仅一行,多个单词,每个单词间用一个空格隔开。单词仅由小写字母组成。所有单词的长度和不超过100000。如有多个最长单词,输出最先出现的。
输入描述:
无
输出描述:
无
样例输入:
I am a student
样例输出:
student
答案:
分析:
L=[i for i in input().split()]
m=''
for i in L:
if len(i)>len(m):
m=i
print(m)
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
任意一个四位数,只要它们各个位上的数字是不全相同的,就有这样的规律:
重复以上过程,最后一定会得到的结果是6174。
比如:4312 3087 8352 6174,经过三次变换,得到6174
输入描述:
一个四位整数,输入保证四位数字不全相同
输出描述:
一个整数,表示这个数字经过多少次变换能得到6174
样例输入:
4312
样例输出:
3
答案:
分析:
num = int(input())
count = 0
while num != 6174:
nums = []
count += 1
#将四位数分开并排序
for i in str(num):
nums.append(int(i))
nums = sorted(nums)
#生成四位数能组成的最大值最小值
max = ''
min = ''
for i in nums:
max = str(i)+max #新学的方法
min = min+str(i)
#求max和min的差
max = int(max)
min = int(min)
num = max - min
#输出
print(count)
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成
1:2:3的比例,试求出所有满足条件的三个三位数。
例如:三个三位数192,384,576满足以上条件。
输入描述:
无
输出描述:
输出每行有三个数,为满足题设三位数。各行为满足要求的不同解。
样例输入:
无
样例输出:
无
答案:
分析:
从最小数的取值范围入手:
下界:123(能组成最小的数)
上界:334(能组成最大的数不超过1000)
def main():
for i in range(123, 334):
a, b, c=list(str(i)), list(str(i*2)), list(str(i*3))
if len(set(a+b+c))==9 and '0' not in a+b+c:
print(i, i*2, i*3)
if __name__=="__main__":
main()