写在前面:
乍一看挺难,仔细想想也就纸老虎罢了,不写题解,自己想吧
目录
问题 A: 字符串去重排序
问题 B: 两数之和
问题 C: 完美立方数
问题 D: 分解质因数
问题 E: 子列表最大长度
问题 F: 列表的合并与排序
问题 G: 个人数据脱敏
问题 H: 列表数据清理
问题 I: 插入位置
问题 J: 对数据进行排序
问题 K: 统计输入
问题 L: 完数判断
问题 A: 字符串去重排序
题目描述
输入一个非空字符串,去除重复的字符后,从小到大排序输出为一个新字符串。
输入
一个非空字符串
输出
去重排序后的字符串
样例输入 复制
Life is short, you need Python!
样例输出 复制
!,LPdefhinorstuy
n=input()
ans=set(n)
mylist=list(ans)
mylist.sort()
mylist="".join(mylist)
print(mylist)
问题 B: 两数之和
题目描述
给定一个整数列表 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的列表索引。
每种输入只需要对应一个答案。但是,你不能重复使用这个数组中同样位置的元素。
如果没找到解,输出“Fail”
输入
两行,
第一行输入一组整数,以空格间隔,数据全部为int型。
第二行输入一个整数
输出
如果有解,输出第一组数据(第一个元素索引最小)的那组解。
如果无解,输出“Fail”
样例输入 复制
3 2 4
6
样例输出 复制
1 2
list1=list(map(int,input().split()))
target=int(input())
length=len(list1)
temp=0
for i in range (length-1):
for j in range (i+1,length):
if (list1[i]+list1[j])==target:
print("{} {}".format(i,j))
temp=1
break;
if(temp):
break;
else:
print("Fail")
问题 C: 完美立方数
题目描述
费马大定理断言,当整数 n > 2时,关于 a,b,c 的方程 an = bn + cn 没有正整数解。 该定理被提出来后,历经三百多年,经历多人猜想辩证,最终在 1995 年被英国数学家安德鲁.怀尔斯证明。 当然,可以找到大于 1 的 4 个整数满足完美立方等式:a3 = b3 + c3 + d3 (例如 123 = 63 + 83 + 103) 编写一个程序,对于任意给定的正整数 N(N<=100),寻找所有的四元组(a,b,c,d),满足 a3= b3+ c3 + d3 其中 1 < a,b,c,d <=N
输入
正整数 N(N <= 100)
输出
按照 a 的值从小到大,每行输出一个完美立方等式,其中b,c,d按照非降序排列输出。
(若两个完美立方式中 a 值相同,则 b 值小的先输出;在 b 值相等的情况下,c 值小的先输出,在 b,c 都相等的情况下,d 值小的先输出。)
样例输入 复制
24
样例输出 复制
Cube = 6,Triple = (3,4,5)
Cube = 12,Triple = (6,8,10)
Cube = 18,Triple = (2,12,16)
Cube = 18,Triple = (9,12,15)
Cube = 19,Triple = (3,10,18)
Cube = 20,Triple = (7,14,17)
Cube = 24,Triple = (12,16,20)
def triple(n,a,b,c,d):
if pow(a,3) == pow(b,3)+pow(c,3)+pow(d,3):
return True
else:
return False
n = eval(input())
for a in range(2,n+1):
for b in range(2,n+1):
for c in range(b,n+1):
for d in range(c,n+1):
if(triple(n,a,b,c,d)):
print("Cube = {},Triple = ({},{},{})".format(a,b,c,d))
问题 D: 分解质因数
题目描述
分解质因数只针对合数(非质数或者非素数,不包括1在内), 每个合数都可以写成几个质数相乘的形式,其中每个质数都是这个合数的因数,叫做这个合数的分解质因数。
(提示:先创建一个空列表ls = [],从小到大寻找质因数,每找到一个质因数 a 就执行 ls.append(a) 加入到列表中,最后输出列表 ls 就可以了)
输入
输入一个合数
输出
以列表形式输出因子,各因子升序排序
样例输入 复制
20
样例输出 复制
[2, 2, 5]
n=int(input())
temp=n
i=0
a=[]
while(n!=1):
for j in range (2,n+1):
if(n%j==0):
a.append(j)
n=int(n/j)
i=i+1
break;
print(a)
问题 E: 子列表最大长度
题目描述
递归检查一个列表的所有子列表及各层次子列表的子列表的长度,返回所有子列表中最大长度。
样例输入 复制
[4, 1, 3, 11, [1, 6, 8, [1, 2, 3, 4, 5, 6, 7]], [[1, 3], [6, 15]]]
样例输出 复制
7
fuck = list(eval(input()))
ans = [len(fuck)]
for i in fuck:
if isinstance(i,list):
ans.append(len(i))
for j in i:
if isinstance(j,list):
ans.append(len(j))
print(max(ans))
问题 F: 列表的合并与排序
题目描述
读入两行,两行的格式一样,都是用空格分隔的若干个整数,将这些数合并到一个列表中,降序排列后输出整个列表。
提示: list1 = list(map(int,input().split())) #读入一行由空格分隔的整数,将其存入list1列表中
输入
输入为两行,两行格式一样,都是用空格分隔的若干个整数(整数个数可能为0个)。
输出
输出为一行,是元素按降序排列后的整数列表。
样例输入 复制
1 5 9 -1 0
234 6 9 2 34 0
样例输出 复制
[234, 34, 9, 9, 6, 5, 2, 1, 0, 0, -1]
list1 = list(map(int,input().split()))
list2 = list(map(int,input().split()))
list3=list1+list2
list3.sort(reverse=True)
print(list3)
问题 G: 个人数据脱敏
题目描述
随着计算机与互联网技术快速发展,电话号码,家庭住址,姓名等个人隐私信息被泄露的风险也越来越高。
数据脱敏是指对敏感信息进行变形处理,比如将电话号码 ‘13000000000’ 中的四位用 ’‘ 来代替,变为 ‘130***0000’。
本题要求从输入的学生信息中将手机号码,姓名,学号数据进行脱敏处理。
处理规则如下:
学号(13 位或 14 位数串):第 5-11 位修改为 ’‘ 如 ’0121134567801‘ 修改为 ’0121******01‘
姓名:第2位修改为'' 如’贾诩‘修改为’贾‘
电话号码(11位数串):第4-7位 修改为'' 如‘13000000000’中修改为‘130***0000’
输入
第一行输入 n,代表 n 个同学的信息
依次输入 n 行学生信息数据,每行保存一名学生的学号、姓名、电话号码以空格间隔
输出
将学生数据脱敏后的信息保存到二维列表中,并输出这个二维表。
如果 n 不是正整数,输出’ERROR‘。(本题保证 n 是整数,且信息完整)
样例输入 复制
2
01211345678011 张辽 14457673508
01211345678012 徐晃 18514863218
样例输出 复制
[['0121*******011', '张*', '144****3508'], ['0121*******012', '徐*', '185****3218']]
n=int(input())
if(n<=0):
print("ERROR")
else:
for i in range (n):
list1 = list(map(str,input().split()))
temp1=list(list1[0])
for j in range (4,11):
temp1[j]='*'
list1[0]="".join(temp1)
temp2=list(list1[1])
temp2[1]="*"
list1[1]="".join(temp2)
temp2=list(list1[2])
for j in range (3,7):
temp2[j]='*'
list1[2]="".join(temp2)
if(i==0):
print('[',end="")
print(list1,end="")
if(i==n-1):
print(']')
else:
print(', ',end="")
问题 H: 列表数据清理
题目描述
输入一个列表,将其中整数和值为整数的字符串转为整型数据,将其中浮点数字符串转为浮点数,其他所有字符串保持原样。
样例输入 复制
[['abc', '123', '45.6', 'car', 'Bike']]
样例输出 复制
[['abc', 123, 45.6, 'car', 'Bike']]
记得用eval!!!一个eval卡我一个小时,f**k
list1 =eval(input())
def fuck(number):
try:
return int(number)
except:
try:
i=float(number)
i='%g'%i
return eval(i)
except:
return number
n=len(list1)
for i in range (n):
list1[i] = list(map(fuck, list1[i]))
print(list1)
问题 I: 插入位置
题目描述
对一个有序的整数序列,现在要将一个整数插入进去,并保证该序列仍然有序。请输出这个数要插入的位置
第一行输入若干个整数,以空格间隔,本题保证用例中输入的数值顺序一定是从小到大,原始列表中无重复数据
第二行输入一个整数n
将整数序列放入列表ls
如果ls中已经存在n,则不插入该数,输出 'Fail'以及ls列表
若ls中可以插入n,输出插入位置,以及插入后的ls列表
样例输入 复制
1 2 3 5
4
样例输出 复制
3
[1,2,3,4,5]
ls=list(map(int,input().split()))
ls=sorted(set(ls))
n=int(input())
if n in ls:
print('Fail')
print(ls)
else:
for i in range(len(ls)):
if ls[i]<n<ls[i+1]:
ind=i+1
ls.insert(ind,n)
elif n>ls[-1]:
ind = len(ls)
ls.insert(ind,n)
elif n<ls[0]:
ind = 0
ls.insert(ind, n)
print(ind)
print(ls)
问题 J: 对数据进行排序
题目描述
输入10个数据,对数据进行排序,要求有从大到小,从小到大,倒序排序3种排序方式
输入
10个数据,用英文逗号隔开
输出
见样例
样例输入 复制
1,100,23,4.5,23,7,9,0,999999,10
样例输出 复制
倒序排序后为: [10, 999999, 0, 9, 7, 23, 4.5, 23, 100, 1]
按从小到大的顺序为: [0, 1, 4.5, 7, 9, 10, 23, 23, 100, 999999]
按从大到小的顺序为: [999999, 100, 23, 23, 10, 9, 7, 4.5, 1, 0]
str = input()
lst = str.split(",")
list1=list(lst)
list2=list(lst)
list3=list(lst)
list3=[eval(i) for i in list3]
list2=[eval(i) for i in list2]
list1=[eval(i) for i in list1]
list1.sort()
list2.sort(reverse=True)
list3.reverse()
print("倒序排序后为: ",end="")
print(list3)
print("按从小到大的顺序为: ",end="")
print(list1)
print("按从大到小的顺序为: ",end="")
print(list2)
问题 K: 统计输入
题目描述
输入10个数据,再输入任意一个数值,统计输入的任意值出现的次数,同时完成10个数据平均值,最大值和最小值的计算
输入
输入10个数据,用英文逗号隔开
输入任意一个数值
输出
见样例
样例输入 复制
0,0,10,23,0.98,-0.4444,7,8,9,98
0
样例输出 复制
0 共出现 2 次
10个数据的平均值为 15.55356
10个数据的最大值为 98
10个数据的最小值为 -0.4444
str = input()
n=eval(input())
temp=0
lst = str.split(",")
s = 0
avg = 0
for x in list(lst):
if float(x)==n:
temp+=1
s=s+float(x)
avg = s/len(list(lst))*1.0
print("{} 共出现 {} 次".format(n,temp))
print("10个数据的平均值为 {}".format(avg,'.5f'))
print("10个数据的最大值为 {}".format(max(list(lst))))
print("10个数据的最小值为 {}".format(min(list(lst))))
问题 L: 完数判断
题目描述
输入一个数,判断其是否是完数(完数就是其所有真因子的和,恰好等于它本身)
输入
一个数
输出
见样例
样例输入 复制
5
样例输出 复制
5 的真约数为: [1]
不是完数
n = int(input())
ass = [1]
q = 1
for i in range(2,n):
if n%i == 0:
ass.append(i)
q+=i
print("{} 的真约数为: {}".format(n,ass))
if q == n:
print("是完数")
else:
print("不是完数")