Contest2574 - 高级语言程序实践--第6次作业--计信A2107-2113

写在前面:

乍一看挺难,仔细想想也就纸老虎罢了,不写题解,自己想吧

目录

问题 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]ls[-1]:
            ind = len(ls)
            ls.insert(ind,n)            
        elif n

 问题 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("不是完数")

你可能感兴趣的:(python,python,算法)