蓝桥杯练习题(三):Python组之算法训练提高综合五十题
文章目录
- 1.字符串合并
- 2.数据交换
- 3.二进制数数
- 4.大等于n的最小完全平方数
- 5.素因子去重
- 5.排序
- 6.预测身高
- 7.最大质因数
- 8.首字母变大写
- 9.字符串排序
- 10.复数求和
- 11.成绩的等级输出
- 12.成绩排序
- 13.字符串跳步
- 14.字符串匹配
- 15.寻找数组中最大值
- 16.九九乘法表正三角和倒三角
- 17.质数2
- 18.利息计算
- 19.进制转换
- 20.前十名
- 21.数组求和
- 22.身份证排序
- 23.出现次数最多的整数
- 24.测试输入数类型
- 25.删除排序数组中的重复项
- 26.5-1最小公倍数
- 28.最大最小公倍数()
- 28.数字分组
- 29.整商问题
- 30.1的个数
- 31.图形显示
- 31.比大小
- 32:抽卡游戏
- 33:矩阵转置
- 34:数字三角形
- 35:单词翻转
- 36:进制转换
- 37:成绩排名
1.字符串合并
问题描述:输入两个字符串,将其合并为一个字符串后输出。
输入格式:输入两个字符串
输出格式:输出合并后的字符串
样例输入:
一个满足题目要求的输入范例。
Hello
World样例输出:HelloWorld
具体代码:
x = input()
y = input()
print(x+y)
运行结果:
2.数据交换
问题描述:
编写一个程序,输入两个整数,分别存放在变量x和y当中,然后使用自己定义的函数swap来交换这两个变量的值。要求:主函数负责数据的输入与输出,但不能直接交换这两个变量的值,必须通过调用单独定义的函数swap来完成,而swap函数只负责交换变量的值,不能输出交换后的结果。
输入格式:输入只有一行,包括两个整数。
输出格式:输出只有一行,也是两个整数,即交换以后的结果。
样例输入:
4 7样例输出:7 4
具体代码:
def swap(x,y):return y,xif __name__ == '__main__':x,y=list(map(int,input().split()))x,y = swap(x,y)print(x,y)
运行结果:
3.二进制数数
问题描述:
给定L,R。统计[L,R]区间内的所有数在二进制下包含的“1”的个数之和。
如5的二进制为101,包含2个“1”。输入格式:第一行包含2个数L,R
输出格式:一个数S,表示[L,R]区间内的所有数在二进制下包含的“1”的个数之和。
样例输入:
2 3样例输出:3
具体代码:
def sum_er(n):n_er=format(n,'b')A=Counter(n_er)B=A['1']return B
if __name__ == '__main__':from collections import Counterx,y=list(map(int,input().split()))result=0for i in range(x,y+1):result+=sum_er(i)print(result)
运行结果:
4.大等于n的最小完全平方数
- 问题描述:
输出大等于n的最小的完全平方数。若一个数能表示成某个自然数的平方的形式,则称这个数为完全平方数
Tips:注意数据范围 - 输入格式:一个整数n
- 输出格式:大等于n的最小的完全平方数
- 样例输入:71711
- 样例输出:71824
- 数据规模和约定:n是32位有符号整数
- 思路:如果输入的数小于等于0,那么直接输出0即可,如果输入的数大于0,那么用暴力循环,找到第一个大于输入的数就使用break退出循环。
具体代码:
def pre_squ(x):if x<=0:return 0for i in range(x):if i**2>=x:return i**2
if __name__ == '__main__':x=int(input())result=pre_squ(x)print(result)
运行结果:
5.素因子去重
- 问题描述:给定一个正整数n,求一个正整数p,满足p仅包含n的所有素因子,且每个素因子的次数不大于1
- 输入格式:一个整数,表示n
- 输出格式:输出一行,包含一个整数p
- 样例输入:1000
- 样例输出:10
- 数据规模和约定: n<=10^12
样例解释:n=1000=2^353,p=2*5=10 - 思路:先找出素数,在根据里面重复的数来进行取舍
具体代码:
def factorization(x):factor=[]while x>1:for i in range(x-1):k=i+2if x%k==0:factor.append(k)x=int(x/k)breakreturn factordef reduce_after(y):r=[]for i in range(0,len(y)):if y[i]==y[i-1]:continueelse:r.append(y[i])totle=1for i in range(len(r)):totle *= r[i]return totleif __name__ == '__main__':x=int(input())factor=factorization(x)result=reduce_after(factor)print(result)
运行结果:
5.排序
- 问题描述:编写一个程序,输入3个整数,然后程序将对这三个整数按照从大到小进行排列。
输入格式:输入只有一行,即三个整数,中间用空格隔开。
输出格式:输出只有一行,即排序后的结果。
输入输出样例 - 样例输入:9 2 30
- 样例输出:30 9 2
具体代码:
x=list(map(int,input().split()))
x.sort(reverse=True)
for i in range(len(x)):print(x[i],end=' ')
运行结果:
6.预测身高
- 问题描述:
生理卫生老师在课堂上娓娓道来:
你能看见你未来的样子吗?显然不能。但你能预测自己成年后的身高,有公式:
男孩成人后身高=(父亲身高+母亲身高)/21.08
女孩成人后身高=(父亲身高0.923+母亲身高)/2
数学老师听见了,回头说:这是大样本统计拟合公式,准确性不错。
生物老师听见了,回头说:结果不是绝对的,影响身高的因素很多,比如营养、疾病、体育锻炼、睡眠、情绪、环境因素等。
老师们齐回头,看见同学们都正在预测自己的身高。
毛老师见此情形,推推眼镜说:何必手算,编程又快又简单…
约定:
身高的单位用米表示,所以自然是会有小数的。
男性用整数1表示,女性用整数0表示。
预测的身高保留三位小数 - 输入格式:用空格分开的三个数,整数 小数 小数分别表示:性别 父亲身高 母亲身高
- 输出格式:一个小数,表示根据上述表示预测的身高(保留三位小数)
- 样例输入:1 1.91 1.70
- 样例输出:1.949
- 样例输入:0 1.00 2.077
- 样例输出:1.500
- 数据规模和约定:
父母身高范围(0,3]
时间限制1.0秒
具体代码:
s,f,m=list(map(float,input().split()))
if s==1:high=(f+m)/2*1.08
else:high=(f*0.923+m)/2
print('%.3f'%high)
运行结果:
7.最大质因数
- 问题描述:给出N个数字,求出有最大的最大质因数的那个数
- 输入格式:第一行:一个整数N。接下来的N行,每行一个整数A_i,表示给出的那N个数字。
- 输出格式:第一行:一个整数,拥有最大的最大质因数的那个数。
- 样例输入:
4
36
38
40
42 - 样例输出:38
- 数据规模和约定:
60%的数据满足:N<=100
100%的数据满足:N<=2500,A_i<=20000
具体代码:(这段代码能完美运行上面蓝桥杯这道题上的所有案列 但是编译就是不通过 很难受QAQ)
def factor(x):a=[]while x>1:for i in range(0,x-1):k=i+2if x%k==0:a.append(k)x=int(x/k)breakreturn a
def sum_fac(y):sum=0for i in range(len(y)):sum+=y[i]return sumif __name__ == '__main__':import numpy as npn=int(input())start=[]sum_ave=[]for i in range(n):a=int(input())start.append(a)b=factor(a)sum=sum_fac(b)sum_ave.append(sum)max=np.argmax(sum_ave)print(start[max])
运行结果:
8.首字母变大写
- 问题描述:对一个字符串中的所有单词,如果单词的首字母不是大写字母,则把单词的首字母变成大写字母。在字符串中,单词之间通过空白符分隔,空白符包括:空格(’ ‘)、制表符(’\t’)、回车符(’\r’)、换行符(’\n’)
- 输入格式:输入一行:待处理的字符串(长度小于80)
- 输出格式:输出一行:转换后的字符串。
- 样例输入:if so, you already have a google account. you can sign in on the right.
- 样例输出:If So, You Already Have A Google Account. You Can Sign In On The Right.
具体代码:
# 将字符串中所有单词首字母大写 string.capwords()==title
import string
n=input()
# print(n.title())
print(string.capwords(n))
运行结果:
9.字符串排序
- 问题描述:输入一个小写字符串,按从小到大的顺序输出。
- 输入格式:bcaed
- 输出格式:abcde 顶格输出,中间没有空格
- 样例输入:一个满足题目要求的输入范例。
例:
bcaed - 样例输出:与上面的样例输入对应的输出。
例:
abcde
具体代码:
n=input()
num=len(n)
fil=[]
for i in range(num):fil.append(n[i])
fil.sort()
for j in range(num):print(fil[j],end='')
运行结果:
10.复数求和
- 问题描述:从键盘读入n个复数(实部和虚部都为整数)用链表存储,遍历链表求出n个复数的和并输出。
- 样例输入:
3
3 4
5 2
1 3 - 样例输出:9+9i
- 样例输入:
7
1 2
3 4
2 5
1 8
6 4
7 9
3 7 - 样例输出:23+39i
具体代码:
n=int(input())
a_sum=0
b_sum=0
for i in range(n):a,b=list(map(int,input().split()))a_sum+=ab_sum+=b
print(a_sum,'+',b_sum,'i',sep='',end='')
运行结果:
11.成绩的等级输出
- 问题描述:输入一个百分制的成绩t后,按下式输出它的等级。等级为:90-100为A,80-89为B,70-79为C,60-69为D,0-59为E。
- 样例输入:98
- 样例输出:A
具体代码:
def rank(x):if x>=90 and x<=100:return 'A'elif x>=80 and x<=89:return 'B'elif x>=70 and x<=79:return 'C'elif x>=60 and x<=69:return 'D'else:return 'E'
if __name__ == '__main__':n=float(input())print(rank(n))
运行结果:
12.成绩排序
- 问题描述:用一维数组存储学号和成绩,然后,按成绩排序输出。
- 输入格式:输入第一行包括一个整数N(1<=N<=100),代表学生的个数。接下来的N行每行包括两个整数p和q,分别代表每个学生的学号和成绩。
- 输出格式:按照学生的成绩从小到大进行排序,并将排序后的学生信息打印出来。
如果学生的成绩相同,则按照学号的大小进行从小到大排序。 - 样例输入:
3
1 90
2 87
3 92 - 样例输出:
2 87
1 90
3 92
具体代码:
n = int(input())
inf=[]
for i in range(n):information = tuple(input().split()) # 得到元组inf.append(information)# 后排成绩,从大到小 传递给key参数的是一个函数,它指定可迭代对象中的每一个元素来按照该函数进行排序
inf.sort(key=lambda x:x[1])for i in range(n):print(inf[i][0],inf[i][1])
运行结果:
13.字符串跳步
- 问题描述:
给定一个字符串,你需要从第start位开始每隔step位输出字符串对应位置上的字符。 - 输入格式:第一行一个只包含小写字母的字符串。第二行两个非负整数start和step,意义见上。
- 输出格式:一行,表示对应输出。
- 样例输入:
abcdefg
2 2 - 样例输出:
ceg - 数据规模和约定:start从0开始计数。字符串长度不超过100000。
具体代码:
n = input()
m1,m2=list(map(int,input().split()))
print(n[m1:len(n)+1:m2]) #n[start:end:interval]
运行结果:
14.字符串匹配
- 问题描述:
给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行。你的程序还需支持大小写敏感选项:当选项打开时,表示同一个字母的大写和小写看作不同的字符;当选项关闭时,表示同一个字母的大写和小写看作相同的字符。 - 输入格式:输入的第一行包含一个字符串S,由大小写英文字母组成。
第二行包含一个数字,表示大小写敏感的选项,当数字为0时表示大小写不敏感,当数字为1时表示大小写敏感。
第三行包含一个整数n,表示给出的文字的行数。
接下来n行,每行包含一个字符串,字符串由大小写英文字母组成,不含空格和其他字符。 - 输出格式:输出多行,每行包含一个字符串,按出现的顺序依次给出那些包含了字符串S的行。
- 样例输入:
Hello
1
5
HelloWorld
HiHiHelloHiHi
GrepIsAGreatTool
HELLO
HELLOisNOTHello - 样例输出:
HelloWorld
HiHiHelloHiHi
HELLOisNOTHello - 数据规模和约定:1<=n<=100,每个字符串的长度不超过100。
具体代码:
start = input()
is_switch=int(input())
n=int(input())
result=[]
cout=0
for i in range(1,n+1):s_input=input()if is_switch==1:if start in s_input:cout+=1result.append(s_input)else:if start.upper() in s_input.upper():cout+=1result.append(s_input)
for i in range(cout):print(result[i])
运行结果:
15.寻找数组中最大值
- 问题描述:
对于给定整数数组a[],寻找其中最大值,并返回下标。 - 输入格式:整数数组a[],数组元素个数小于1等于100。输出数据分作两行:第一行只有一个数,表示数组元素个数;第二行为数组的各个元素。
- 输出格式:输出最大值,及其下标
- 样例输入:
3
3 2 1 - 样例输出:
3 0
具体代码:
n=int(input())
arr=list(map(int,input().split()))
arr1=[i for i in range(n)]
# print(arr)
# print(arr1)
max=0
max_idex=0
for i in range(n):if arr[i]>max:max=arr[i]max_idex=i
print(max,max_idex)
运行结果:
16.九九乘法表正三角和倒三角
- 问题描述:
通过合理的编程来实现九九乘法表,包括正三角和倒三角的形态 - 输出格式:
1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81
1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64
1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49
1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36
1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25
1 * 4 = 4 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16
1 * 3 = 3 2 * 3 = 6 3 * 3 = 9
1 * 2 = 2 2 * 2 = 4
1 * 1 = 1
1 * 1 = 1
1 * 2 = 2 2 * 2 = 4
1 * 3 = 3 2 * 3 = 6 3 * 3 = 9
1 * 4 = 4 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16
1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25
1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36
1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49
1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64
1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81
具体代码:
for i in range(-9,0):for j in range(1,10):if(j==i*(-1)):print(j,'*',i*(-1),'=',i*j*(-1),end=' ')print( )breakelse:if (i * j *(-1) > 9):print(j, "*",i*(-1), "=", i * j *(-1), end=" ")else:print(j, "*",i*(-1), "=", i * j * (-1), end=" ")for i in range(1,10):for j in range(1,i+1):if i == j :print(j,'*',i,'=',i*j,end='')print()else:if i*j>9:print(j,'*',i,'=',i*j,end=' ')else:print(j,'*',i,'=',i*j,end=' ')
运行结果:
17.质数2
- 问题描述:
给定一个正整数N,请你输出N以内(不包含N)的质数以及质数的个数。 - 输入格式:输入一行,包含一个正整数N。
- 输出格式:共两行。第1行包含一个整数,表示N以内质数的个数。第2行包含若干个素数,每两个素数之间用一个空格隔开,素数从小到大输出。
- 样例输入:
10 - 样例输出:
4
2 3 5 7
具体代码:
def is_prime(num):for i in range(2,num):if num%i==0:return Falsereturn True
if __name__ == '__main__':i=2n=int(input())cout=0totle=[]for i in range(2,n):# if is_hui(i):# print(i)if is_prime(i):cout+=1totle.append(i)print(cout)for i in range(cout):print(totle[i],end=' ')
运行结果:
18.利息计算
- 问题描述:
编制程序完成下述任务:接受两个数,一个为用户一年期定期存款金额,一个为按照百分比格式表示的利率;程序计算一年期满后本金与利息总额。说明:(1)存款金额以人民币元为单位,可能精确到分;(2)输入利率时不需要输入百分号,例如一年期定期存款年利率为2.52%,用户输入2.52即可;(3)按照国家法律,存款利息所得需缴纳20% 的所得税,计算结果时所得税部分应扣除。 - 输入格式:输入一行,包含两个实数,分别表示本金和年利率。
- 输出格式:输出一行,包含一个实数,保留到小数点后两位,表示一年后的本金与利息和。
- 样例输入:
10000 2.52 - 样例输出:
10201.60
具体代码:
n,m=list(map(float,input().split()))
earn=n*(m/100)*0.8
whole_money=n+earn
print('%.2f'%whole_money)
运行结果:
19.进制转换
- 问题描述:
程序提示用户输入三个字符,每个字符取值范围是0-9,A-F。然后程序会把这三个字符转化为相应的十六进制整数,并分别以十六进制,十进制,八进制输出。 - 输入格式:输入只有一行,即三个字符。
- 输出格式:输出只有一行,包括三个整数,中间用空格隔开。
- 样例输入:
FFF - 样例输出:
FFF 4095 7777
具体代码:
x=input()
b=int(x,16) #10
a=format(b,'X') #16
c=format(b,'o') #8
print(a,b,c,end='')
运行结果:
20.前十名
- 问题描述:
数据很多,但我们经常只取前几名,比如奥运只取前3名。现在我们有n个数据,请按从大到小的顺序,输出前10个名数据。 - 输入格式:两行。第一行一个整数n,表示要对多少个数据;第二行有n个整数,中间用空格分隔。表示n个数据。
- 输出格式:一行,按从大到小排列的前10个数据,每个数据之间用一个空格隔开。
- 样例输入:
26
54 27 87 16 63 40 40 22 61 6 57 70 0 42 11 50 13 5 56 7 8 86 56 91 68 59 - 样例输出:
91 87 86 70 68 63 61 59 57 56
具体代码:
x=int(input())
arr=list(map(int,input().split()))
arr.sort(reverse=True)
for i in range(0,x):if i<10:print(arr[i],end=' ')
运行结果:
21.数组求和
- 问题描述:
输入n个数,围成一圈,求连续m(m<n)个数的和最大为多少? - 输入格式:输入的第一行包含两个整数n, m。第二行,共n个整数。
- 输出格式:输出1行,包含一个整数,连续m个数之和的最大值。
- 样例输入:
10 3
9 10 1 5 9 3 2 6 7 4 - 样例输出:
23
具体代码:
n,m=list(map(int,input().split()))
arr=list(map(int,input().split()))
arr2=arr+arr
sum1=0
sum2=0
for i in range(0,n):for j in range(int(i),int(i)+m):sum2+=arr2[j]if sum1<sum2:sum1=sum2sum2=0
print(sum1)
运行结果:
22.身份证排序
- 问题描述:
安全局搜索到了一批(n个)身份证号码,希望按出生日期对它们进行从大到小排序,如果有相同日期,则按身份证号码大小进行排序。身份证号码为18位的数字组成,出生日期为第7到第14位 - 输入格式:第一行一个整数n,表示有n个身份证号码余下的n行,每行一个身份证号码。
- 输出格式:按出生日期从大到小排序后的身份证号,每行一条
- 样例输入:
6
466272307503271156
215856472207097978
234804580401078365
404475727700034980
710311408803093165
710351408803093165 - 样例输出:
404475727700034980
234804580401078365
215856472207097978
710351408803093165
466272307503271156 - 数据规模和约定: n<=100000
- 思路:这里会用到operator库中的itemgetter()函数,你可以通过指定二维列表中的下标来决定列表排序时的参照值时哪一个
具体代码:
from operator import itemgetter
n=int(input())
number=[]
for i in range(n):a=input()number.append([int(a[6:14]),int(a)])
number.sort(key=itemgetter(0,1),reverse=True) # 根据0和1dim的位置进行排序 这个意思是说如果0dim不能排出来,那我们根据1dim来进行排序
print(number)
for i in number:print(i[1])
运行结果:
23.出现次数最多的整数
- 问题描述:
编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20。然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来。如果有两个元素值出现的次数相同,即并列第一,那么只打印比较小的那个值。 - 输入格式:第一行是一个整数N,N £ 20;接下来有N行,每一行表示一个整数,并且按照从小到大的顺序排列。
- 输出格式:输出只有一行,即出现次数最多的那个元素值。
- 样例输入:
5
100
150
150
200
250 - 样例输出:
150
具体代码:
from collections import Counter
n=int(input())
a_arr=[]
for i in range(n):a=int(input())a_arr.append(a)
if n==0:print()
elif n<0:print()
else:a=Counter(a_arr)b=a.most_common(1)[0][0]# print(a)print(b)
运行结果:
24.测试输入数类型
- 问题描述:
输入一个整数,判断是否是偶数 - 输入格式:输入一个整数
- 输出格式:输出判断结果,YES 或者 NO
- 样例输入:0
- 样例输出:YES
- 样例输入:-1
- 样例输出:NO
具体代码:
n=int(input())
if abs(n)%2==0:print('YES')
else:print('NO')
运行结果:
25.删除排序数组中的重复项
- 问题描述:
输入一串数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 - 输入格式:输入两个整数
- 输出格式:删除排序数组中的重复项并按照逐个输出
- 样例输入:10 12
- 样例输出:2 3 5
- 样例输入:30 55
- 样例输出:2 3 5 11
- 思路:先找到输入两个数的分解的全部质数,然后结合它们的质数,通过np.unique来直接输出无重复的数
具体代码:
def factory(x):factor=[]if x<10:factor.append(x)else:while x>1:for i in range(n-1):k=i+2if x%k==0:factor.append(k)x=int(x/k)breakreturn factorimport numpy as np
n,m=list(map(int,input().split()))
arr_a=factory(n)
arr_b=factory(m)
new_arr=arr_a+arr_b
# print(new_arr)
x=np.unique(new_arr)
# print(x)
sum=1
for i in range(len(x)):print(x[i],end=' ')
# print(sum)
运行结果:
26.5-1最小公倍数
- 问题描述:
编写一函数lcm,求两个正整数的最小公倍数。 - 输入格式:输入两个整数
- 输出格式:输出这两个正整数的最小公倍数
- 样例输入:3 5
- 样例输出:15
具体代码:
n,m=list(map(int,input().split()))
n1=n
m1=m
while m1:n1,m1=m1,n1%m1 # n为最大公约数
x=n*m//n1
print(x)
运行结果:
28.最大最小公倍数()
- 问题描述:
已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。 - 输入格式:输入一个正整数N。
- 输出格式:输出一个整数,表示你找到的最小公倍数。
- 样例输入:9
- 样例输出:504
具体代码:
N = int(input())
if N<=2:print(N)
elif N%2==1:print(N*(N-1)*(N-2))
else:if N%3 == 0:print((N-1)*(N-2)*(N-3))else:print(N*(N-1)*(N-3))
运行结果:
28.数字分组
- 问题描述:输入任意10个浮点数,根据它们的聚集程度划分为3组,输出每一组的平均值。提供老师上课讲的一种思路:将10个数字进行在数轴上排序,然后计算每两个点间的距离,在所有的距离中选取两个最大距离处断开,这样就把10个数字分为了3组。本题难度较大,如果深入讨论会比较复杂,大家可以只考虑如下面样例所示的分组情况非常简单的情况,只要简单情况能够成功计算,本题就能得分。另外,本题内容有些超前,推荐大家自学一下数组那一章中第一节一维数组,然后使用一维数组来做。排序算法可以参考trustie平台上传的冒泡排序法参考资料。
- 输入格式:十个待输入的浮点数,使用空格隔开
- 输出格式:三组数的平均数,每输出一个需要换行
- 样例输入:50.4 51.3 52.3 9.5 10.4 11.6 19.1 20.8 21.9 49.6
- 样例输出:
10.5
20.6
50.9 - 样例输入:8.6 7.4 3.5 17.9 19.1 18.5 37.6 40.4 38.5 40.0
- 样例输出:
6.5
18.5
39.125
具体代码:
def avg(list):sum=0for i in range(len(list)):sum+=list[i]return sum/len(list)def spilt(list):key_number=[]for i in range(len(list)-1):if int(list[i])+5.0>int(list[i+1]):continueelse:key_number.append(list.index(list[i])) # 返回关键分割点索引位置return key_numberif __name__ == '__main__':arr=list(map(float,input().split()))arr.sort(reverse=False)# print(arr)key_number=spilt(arr)arr_1=arr[:int(key_number[0])+1]arr_2=arr[int(key_number[0])+1:int(key_number[1])+1]arr_3=arr[int(key_number[1]) + 1:]# print(arr_1)# print(arr_2)# print(arr_3)result=[]result_1=avg(arr_1)result_2=avg(arr_2)result_3=avg(arr_3)result.append(result_1)result.append(result_2)result.append(result_3)result.sort()if result[0]<10:for i in range(len(result)):print(result[i])else:for i in range(len(result)):print('%.1f'%result[i])
运行结果:
29.整商问题
- 问题描述:
提示用户输入被除数(dividend)和除数(divisor),若除数为0,则提示用户重新输入,直至除数非零为止。最后输出商。程序建议大家将被除数、除数和商都定义为整形。
输入被除数提示语句为:Please enter the dividend:
输入除数提示语句为:Please enter the divisor:
提示除数为0需要重新输入的语句为: Error: divisor can not be zero! Please enter a new divisor:
建议:大家直接复制上述语句,以免出现不必要的错误。 - 输入格式:被除数 除数 。 注:若除数为零,则需要连续输入除数直至其非零为止。
- 输出格式:提示性语句 商 。注意每个提示性语句输出后需要换行,具体参考下面的样例输出。
- 样例输入:
一个满足题目要求的输入范例。
例1:
10 2
例2:
20 0 0 4 - 样例输出:
与上面的样例输入对应的输出。
例1:
Please enter the dividend:
Please enter the divisor:
5
例2:
Please enter the dividend:
Please enter the divisor:
Error: divisor can not be zero! Please enter a new divisor:
Error: divisor can not be zero! Please enter a new divisor:
5
具体代码:
arr=list(map(int,input().split()))
a=arr[0]
b=arr[1:]
c=0
print('Please enter the dividend:')
print('Please enter the divisor:')
for i in range(len(b)):if b[i]==0:print('Error: divisor can not be zero! Please enter a new divisor:')continueelse:c=b[i]
print(a//c)
运行结果:
30.1的个数
- 问题描述:
输入正整数n,判断从1到n之中,数字1一共要出现几次。例如1123这个数,则出现了两次1。例如15,那么从1到15之中,一共出现了8个1。 - 输入格式:一个正整数n
- 输出格式:一个整数,表示1出现的资料
- 样例输入:15
- 样例输出:8
具体代码:
def sum_1(n):n=str(n)cout=0# print(len(n))list = []for i in range(len(n)):list.append(n[i])A=Counter(list)return A['1']from collections import Counter
if __name__ == '__main__':n=int(input())cout_sum=0for i in range(0,n+1):a=sum_1(i)cout_sum+=aprint(cout_sum)
运行结果:
31.图形显示
- 问题描述:
编写一个程序,首先输入一个整数,例如5,然后在屏幕上显示如下的图形(5表示行数):
* * * * *
* * * *
* * *
* *
*
具体代码:
n=int(input())
for i in range(n,0,-1):print('* ' * i)
运行结果:
31.比大小
- 问题描述:
输入n个字符串,比较这些字符串的大小并统计并按字典序输出字符串及出现个数 - 输入格式:输入的第一行包含一个整数n,表示字符串个数。接下来n行,表示输入的字符串。
- 输出格式:输出n行,每行包含一个字符串及一个整数,表示字符串及出现个数。
- 样例输入:
5
aab
bbc
aab
sdffg
sgjklsa - 样例输出:
aab 2
bbc 1
sdffg 1
sgjklsa 1 - 下面我写的代码明明可以输出得到样例输出,但是一直不通过,我也有点疑惑,代码在下面供大家参考
具体代码:
from collections import Counter
n=int(input())
arr=[]
for i in range(n):a=input()arr.append(a)
x=Counter(arr)
a=int(len(x))
new=x.most_common(a)
# print(a)
# print(new)
for i in new:# print(i)for j in range(2):print(i[j],end=' ')print()
运行结果:
32:抽卡游戏
- 问题描述:某个抽卡游戏卡池抽出限定卡的概率为p,该游戏有一个“井”的机制,抽满k次卡后直接送这张限定卡。试求获得这张限定卡需要的期望抽卡次数。输入为一行,用空格隔开的p和k。输出为一行,即期望抽卡次数,取2位小数
- 样例输入:0.005 250
- 样例输出:142.88
- 样例说明:
第1次抽到的概率为0.005
第2次抽到的概率为(1-0.005)0.005
第n次抽到的概率为(1-0.005)^(n-1)0.005
第250抽到的概率为之前都没有抽到的概率,即(1-0.005)^249
最终结果
10.005+2(1-0.005)0.005+…+n(1-0.005)**(n-1)×0.005+…+250×(1-0.005)**249=142.88
具体代码:
def cal(n,m):a=m*pow(1-n,m-1)*nreturn a
sum=0
n,m=list(map(float,input().split()))
for i in range(1,int(m)):sum+=cal(n,i)
sum1=m*pow(1-n,m-1)
sum_totle=sum1+sum
print('%.2f'%sum_totle)
运行结果:
33:矩阵转置
- 问题描述:给定一个n×m矩阵相乘,求它的转置。其中1≤n≤20,1≤m≤20,矩阵中的每个元素都在整数类型(4字节)的表示范围内。
- 输入格式:第一行两个整数n和m;第二行起,每行m个整数,共n行,表示n×m的矩阵。数据之间都用一个空格分隔。
- 输出格式:共m行,每行n个整数,数据间用一个空格分隔,表示转置后的矩阵。
- 样例输入:
2 4
34 76 -54 7
-4 5 23 9 - 样例输出:
34 -4
76 5
-54 23
7 9
具体代码:(对了90%)
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""方法1""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
# 生成“竖排列表”
def vertical(list):o=[]for i in range(r):e=[]for j in list:e.append(j[i])o.append(e)return o
#print(vertical(start))n,m=list(map(int,input().split()))
initial_arr=[]
if n<m:max=mmin=n
else:max=nmin=m
for i in range(max):initial_arr.append(input().split())
# print(initial_arr)
new_arr=[]
for i in range(min):e=[]for j in initial_arr:e.append(j[i])new_arr.append(e)
# print(new_arr)
for k in new_arr:for l in range(max):print(k[l],end=' ')print()
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""方法2"""""""""""""
n,m=list(map(int,input().split()))
initial_arr=[]
for i in range(n):initial_arr.append(input().split())
new=list(map(list,zip(*initial_arr)))
for i in new:for j in i:print(j,end=' ')print()
运行结果:
34:数字三角形
- 问题描述:
- 输入格式:
文件中首先读到的是三角形的行数。
接下来描述整个三角形 - 输出格式:最大总和(整数)
- 样例输入:
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5 - 样例输出:30
具体代码:
n=int(input())
arr=[]
for i in range(n):arr.append(list(map(int,input().split())))
# print(arr)
time=0
for i in range(n-1,-1,-1):for j in range(i):# print(arr[i][j],'******',arr[i][j+1])arr[i-1][j]+=max(arr[i][j],arr[i][j+1])time+=1# print('第{}次循环'.format(time),arr)
print(arr[0][0])
运行结果:
35:单词翻转
- 问题描述:输入包括一个英语句子。
- 输入格式:按单词的顺序把单词倒序输出
- 输出格式:最大总和(整数)
- 样例输入:I love you
- 样例输出:you love I
具体代码:
n=list(map(str,input().split(' ')))
num=len(n)
for i in range(1,num+1):print(n[num-i],end=' ')
运行结果:
36:进制转换
- 问题描述:编写函数将十进制整数按8进制输出,然后编写main函数验证该函数。例如输入12,则输出为:12=014,输入32,则输出32=040。
- 输入格式:输入一个整数。
- 输出格式:输出这个整数的八进制形式。
- 样例输入:12
- 样例输出:014
具体代码:
n=int(input())
if n==0:print(0)
else:n1=len(str(n))print(n1)if n1==3:print("{0:0>4}".format(format(n,'o')))else:print("{0:0>3}".format(format(n,'o')))
运行结果:
37:成绩排名
- 问题描述:小明刚经过了一次数学考试,老师由于忙碌忘记排名了,于是老师把这个光荣的任务交给了小明,小明则找到了聪明的你,希望你能帮他解决这个问题。
- 输入格式:第一行包含一个正整数N,表示有个人参加了考试。接下来N行,每行有一个字符串和一个正整数,分别表示人名和对应的成绩,用一个空格分隔。
- 输出格式:输出一共有N行,每行一个字符串,第i行的字符串表示成绩从高到低排在第i位的人的名字,若分数一样则按人名的字典序顺序从小到大。
- 样例输入:
3
aaa 47
bbb 90
ccc 70 - 样例输出:
bbb
ccc
aaa
具体代码:
n=int(input())
list=[]
for i in range(n):a,b=input().split()list.append([a,int(b)])
list.sort(key=lambda x:x[0])
list.sort(key=lambda x:x[1],reverse=True)
print(list)
for i in list:for j in range(1):print(i[j])
运行结果:
蓝桥杯练习题(三):Python组之算法训练提高综合五十题相关推荐
- 2020年软件类第十一届蓝桥杯 省赛 python组(人生苦短,我用python)
2020年软件类第十一届蓝桥杯 省赛 python组 题解 文章目录 2020年软件类第十一届蓝桥杯 省赛 python组 题解 试题 A: 门牌制作 试题 B: 寻找 2020 试题 C: 跑步训练 ...
- 2021年软件类第十二届蓝桥杯 省赛 python组 F-J题解
2021年软件类第十二届蓝桥杯 省赛 python组 F-J题解 文章目录 2021年软件类第十二届蓝桥杯 省赛 python组 F-J题解 试题 F:时间显示 题目描述 输入描述 输出描述 输入输出 ...
- 11.python解答2020年蓝桥杯省赛python组 寻找2020
11.python解答2020年蓝桥杯省赛python组 寻找2020 问题描述 小蓝有一个数字矩阵,里面只包含数字 0 和 2.小蓝很喜欢 2020,他想找到这个数字矩阵中有多少个 2020 . 小 ...
- 9.python解答2020年蓝桥杯省赛python组 门牌制作
9.python解答2020年蓝桥杯省赛python组 门牌制作 问题描述 小蓝要为一条街的住户制作门牌号. 这条街一共有 2020 位住户,门牌号从 1 到 2020 编号. 小蓝制作门牌的方法是先 ...
- 2020年第11届蓝桥杯省赛Python组(真题+解析+代码):数字三角形
大家好,我是爱分享的小蓝,欢迎交流指正~ 1 真题 输入 5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 输出 27 2 解析 难度系数:⭐⭐ 考察题型:动态规划 涉及知识点:模块 ...
- 2020第十一届蓝桥杯国赛Python组
A美丽的2 答案:563 res = 0 for i in range(1, 2021):if '2' in str(i):res += 1 print(res) # 563 B合数个数 模拟即可 答 ...
- 蓝桥杯练习系统:【试题 算法训练 最大质因数】
试题 算法训练 最大质因数 时间限制:1.0s 内存限制:256.0MB 问题描述 *** 给出N个数字,求出有最大的最大质因数的那个数 输入格式 第一行:一个整数N. 接下来的N行,每行一个整数A_ ...
- 蓝桥杯 分巧克力 python组
题目描述 儿童节那天有 K 位小朋友到小明家做客.小明拿出了珍藏的巧克力招待小朋友们. 小明一共有 N 块巧克力,其中第 i 块是 Hi×Wi 的方格组成的长方形.为了公平起见, 小明需要从这 N ...
- 蓝桥杯官网python组基础练习-入门01-04
目录 BASIC-01 A+B问题 题目 代码 BASIC-02 序列求和 题目 代码 BASIC-03 圆的面积 题目 代码 BASIC-04 Fibonacci斐波那契数列 题目 代码 BASIC ...
- 蓝桥杯官网python组基础练习-基础1-5
BASIC-1 闰年判断 题目 给定一个年份,判断这一年是不是闰年. 当以下情况之一满足时,这一年是闰年: 年份是4的倍数而不是100的倍数: 年份是400的倍数. 其他的年份都不是闰年. 输入格式 ...
最新文章
- 惊艳!为艺术而生的算法
- [原]fuse-convmvfs 0.2.6介绍及使用
- Spring Cloud构建微服务架构:分布式服务跟踪(收集原理)【Dalston版】
- matplotlib嵌入到pyqt中
- CSS成长之路----知识点篇
- 深入浅出Python元编程
- Cross-site Scripting (XSS) 阅读笔记
- Spring Boot 面试题
- onInterceptTouchEvent / onTouchEvent响应事件的详析
- 《坐热板凳》第五次作业:团队项目需求改进与系统设计
- vue.js2.0视频教程
- Flash 第二章 基本绘图工具-课堂笔记
- php中wamp具体指的是,phpwamp和wampserver有什么关系,为什么名字都带wamp这几个字母,两者有区别吗?我应该用哪个?...
- 单例模式几种实现方式和代码
- win10 初试tracert
- linux安装ms字体
- 把妹需要勇敢,心有猛虎,细嗅蔷薇
- 关于PHPExcel导出单元格换行的问题
- Flutter对话框(AlertDialog,SimpleDialog,showModalBottomSheet,showToast)以及定时器
- POJ.3281 dining 最大流+拆点
热门文章
- 「Python条件结构」嵌套if:根据星期英文字母输出相应的星期
- 白杨SEO:必应搜索引擎的特点,必应SEO优化怎么做?
- 环境配置 python 3.6+Anaconda+cuda9.0+cudNN7.0+Tensorflow
- Windows服务器tomcat日志拆分(cronolog )
- 深入理解C#面向对象之继承
- 如何将英文句子分词(拆分单词), 并判断分词是否为英文单词
- XSS.haozi.me刷题
- IE下载时中文文件名乱码解决
- mac 文档 只读修改
- 关于微信小程序中的取整