PTA第三章算法题汇总

嗨,同学,要成为粉丝才可见奥,关注我把哈哈哈哈或,奥利给 ~

7-1.大于身高的平均值 (10分)

中小学生每个学期都要体检,要量身高,因为身高可以反映孩子的生长状况。现在,一个班的身高已经量好了,请输出其中超过平均身高的那些身高。程序的输入为一行数据,其中以空格分隔,每个数据都是一个正整数。程序要输出那些超过输入的正整数的平均数的输入值,每个数后面有一个空格,输出的顺序和输入的相同。

lst = list(map(int,input().split()))
sum=0
for i in range(0,len(lst)):
    sum=sum+lst[i]
aver=sum/len(lst)
for i in range(0,len(lst)):
    if(lst[i]>aver):
        print('{:d} '.format(lst[i]),end="")

7-2 输出字母在字符串中位置索引 (20分)

输入一个字符串,再输入两个字符,求这两个字符在字符串中的索引。

s=input()
m,n=input().split()
for i in range(len(s)-1,-1,-1):
	if s[i]==m:
		print("%d %s"%(i,m))
	if s[i]==n:
		print("%d %s"%(i,n))

7-3 查找指定字符 (15分)

本题要求编写程序,从给定字符串中查找某指定的字符。

a=input()
b=input()
for i in range(-1,-(len(b)+1),-1):
    if b[i]==a:
        print("index = {:d}".format(len(b)+i))
        break
    else:
        print("Not Found")
        
''' 
a=input()
b=input()
if a in b:
    print('index =', b.rindex(a))
else:
    print('Not Found')
'''

'''
a=input()
s=input()
s1=list(s)
if len(a)==1 and 0<len(s)<=80:
    if a in s1:
        print("index =",s.rindex(a)) 
    else:
        print("Not Found")
'''
        

7-4 字符转换 (15分)

本题要求提取一个字符串中的所有数字字符('0'……'9'),将其转换为一个整数输出。

'''
a = input()
res = ""
for i in a:
    if i.isdigit():
        res += i
print(int(res))
'''

a=input()
c=""
for i in a:
    if i in ['1','2','3','4','5','6','7','8','9','0']:
        c += i
print(int(c))

7-5 求整数序列中出现次数最多的数 (15分)

本题要求统计一个整型序列中出现次数最多的整数及其出现次数。

'''
# my answer
l=[]
a=input().split()
for i in a:
    l.append(int(i))
l2=[]
for i in l:
    count=0
    for j in l:
        if i==j:
            count=count+1
    l2.append(count)
max=l2[0]
for i in range(len(l2)):
    if l2[i]>=max:
        t=i
        max=l2[i]
print("{} {}".format(l[t],max))
'''
'''
# student 1
a=input().split()
b=len(a)
c = a[0]
for i in range(0,b):
    if a.count(c) <= a.count(a[i]):
        c=a[i]
print(int(c), a.count(c))

'''

'''
# student 2
n = list(input().split())
b = n.count(n[0])
i = n[0]
for a in n:
    if n.count(a) >= b:
        b = n.count(a)
        i = a
print(i, b)
'''

'''
# student 3
lst = list(map(int,input().split()))
m=lst.count(lst[0])
for i in (1,len(lst)-1):
    a=lst.count(lst[i])
    if a >= m:
        m = a
        b = lst[i]
print('{} {}'.format(b,m))
'''
'''
a = input().split() 
b = a.count(a[0]) 
c = a[0]   
l = len(a)   
for i in range(0,l):    
    if a.count(a[i]) >= b:   
        b = a.count(a[i])   
        c = a[i]   
print(c,b)
'''
a=input().split()
idx = a[0]
b=a.count(a[0]) #count max
for i in range(1,len(a)):
    if a.count(a[i])>= b:
        b=a.count(a[i])
        idx = a[i]
print("{} {}".format(idx,b))

7-6 求最大值及其下标 (20分)

本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。

n=int(input())
lst = list(map(int,input().split()))
max=lst[0]
maxi=0
for i in range(1,n):
    if(lst[i]>max):
        maxi=i
        max=lst[i]
# print('{:d} {:d}'.format(lst[maxi],maxi))
print(lst[maxi], maxi)

7-7 字符串逆序 (15分)

输入一个字符串,对该字符串进行逆序,输出逆序后的字符串。

a = input()
print(a[::-1])

7-8 统计大写辅音字母 (15分)

英文辅音字母是除AEIOU以外的字母。本题要求编写程序,统计给定字符串中大写辅音字母的个数。

s=input()
count=0
for i in range(0,len(s)):
    if "A"<=s[i]<="Z" and s[i]!="A" and s[i]!="E" and s[i]!="I" and s[i]!="O" and s[i]!="U":
        count=count+1
print(count)

 7-9 字符串排序 (20分)

本题要求编写程序,读入5个字符串,按由小到大的顺序输出。

# print("After sorted:", *sorted(list(input().split())), sep="\n")
lst = list(map(str,input().split()))
lst.sort()
print("After sorted:")
for i in range(0,len(lst)):
    print(lst[i])

7-10 求整数的位数及各位数字之和 (15分)

对于给定的正整数N,求它的位数及其各位数字之和。

a = input()
sum=0
for i in range(len(a)):
    sum=sum+int(a[i])
print('{:d} {:d}'.format(len(a),sum))

7-11 字符串替换 (15分)

本题要求编写程序,将给定字符串中的大写英文字母按以下对应规则替换:

原字母对应字母
AZ
BY
CX
DW
XC
YB
ZA
'''
a = input()
b = []
for n in a :
   if"A" <= n <= "Z" :
      b.append(chr(155-ord(n)))
   else:
      b.append(n)
print("".join(b))
'''
import string
pt=string.ascii_uppercase
ct=pt[::-1]
table=str.maketrans(pt,ct)
ins=input()
outs=ins.translate(table)
print(outs)

7-12 字符串字母大小写转换 (15分)

本题要求编写程序,对一个以“#”结束的字符串,将其小写字母全部转换成大写字母,把大写字母全部转换成小写字母,其他字符不变输出。

 

s = input()
s = s[:s.find("#")]
ss = ''
for c in s:
    if c.islower():
        ss += c.upper()
    elif c.isupper():
        ss += c.lower()
    else:
        ss += c
print(ss)

 7-13 统计一行文本的单词个数 (15分)

本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。

  cnt=0
for i in input().split():
    cnt=cnt+1
print(cnt)

7-14 删除重复字符 (20分)

本题要求编写程序,将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。

  '''
s=input()
s=set(s)
s=list(s)
list.sort(s)
a="".join(s)
print(a)
'''
'''
s=list(input())
lst = []
for i in s:
    if i not in lst:
        lst.append(i)
lst.sort()
for item in lst:
    print(item,end = "")
'''
a=input()
b=[]
for i in a:
     if i not in b:
          b.append(i)
print("".join(sorted(b)))

7-15 删除字符 (30分)

输入一个字符串 str,再输入要删除字符 c,大小写不区分,将字符串 str 中出现的所有字符 c 删除。

  '''
s1 = input().strip()
s2 = input().strip()
s1 = s1.replace(s2.upper(), '').replace(s2.lower(), '')
print("result: {}".format(s1))
'''
'''
b=input().strip()
c=input().strip()
c1=c.lower()
c2=c.upper()
d=''
for i in b:
    if i != c1 and i != c2:
        d=d+i
print("result: {}".format(d))
'''
'''
b = str(input()).strip()
c = str(input())
a = c.strip()
a1 = a.lower()
a2 = a.upper()
x = ''
for i in b:
    if i != a1 and i != a2:
        x = x + i
print('result:', x)
'''

a=str(input()).strip()
b=input()
b=b.replace(' ','')
b1 = b.upper()
b2 = b.lower()
n=''
for i in range(0,len(a)):
    if a[i]==b1 or a[i]==b2:
        n=n
    else:
        n=n+a[i]
print('result:',n)

7-16 输出10个不重复的英文字母 (50分)

随机输入一个字符串,把最左边的10个不重复的英文字母(不区分大小写)挑选出来。 如没有10个英文字母,显示信息“not found”

  string = ''.join(input().split())
container = set()
indexList = list()
for i in range(0, len(string)):
    old = len(container)
    if str.isalpha(string[i]):
        container.add(string[i].lower())
    new = len(container)
    if old != new:
        indexList.append(i)
        if len(container) == 10:
            print(*list(map(lambda a: string[a], indexList)), sep="")
            exit()
print("not found")

7-17 找最长的字符串 (15分)

本题要求编写程序,针对输入的N个字符串,输出其中最长的字符串。

  a= int(input())
i = 0
b = []
e = []
for i in range(a):
    d = input()
    b.insert(i,len(d))
    e.insert(i,d)
    i+=1
index1 = 0
max_ = len(str(b[index1]))
for i in b:
    if i>=index1:
        index1 = b.index(i)
        max_ = i
print("The longest is: {}".format(e[index1]))

7-18 逆序的三位数 (10分)

程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。

  
a=input()
if len(a)==3:
    a=int(a)
    while a%10==0:
        a=a//10
    print(str(a)[-1::-1])

7-19 判断回文字符串 (15分)

输入一个字符串,判断该字符串是否为回文。回文就是字符串中心对称,从左向右读和从右向左读的内容是一样的

  '''
s=input()
flag=False
for i in range(len(s)//2):
    if s[i] != s[len(s)-1-i]:
        flag=True
if flag == True:
    print(s)
    print("No")
else:
    print(s)
    print("Yes")
'''
'''
b=input()
a=list(b)
flag = True
for i in range(0,int(len(a)/2)):
    if a[i] != a[len(a) - i - 1]:
        flag = False
print(b)
if flag:
    print("Yes")
else:
    print("No")
'''
s = input()
f = True
for i in range(len(s)//2 + 1):
    if s[i] == s[len(s)-i-1]:
        f = True
    else:
        f = False
if f == True:
    print(s)
    print("Yes")
else:
    print(s)
    print("No")

7-20 输出大写英文字母 (15分)

本题要求编写程序,顺序输出给定字符串中所出现过的大写英文字母,每个字母只输出一遍;若无大写英文字母则输出“Not Found”。

  '''
s=input()
data=[]
for i in range(len(s)):
    if s[i].isupper() and s[i] not in data:
        data.append(s[i])
    if i==len(s)-1 and len(data) == 0:
        print("Not Found")
for i in data:
    print("%s"%i,end="")
'''
# 注意全是空格输入的特殊情况的判断

a=input()
b=[]
for i in a:
    if "".join(b).find(i)==-1 and i.isupper():
        b.append(i)
if len(b) == 0:
    print("Not Found")
else:
    print("".join(b))

*7-21 判断两个字符串是否为变位词 (40分)

如果一个字符串是 另一个字符串的重新排列组合,那么这两个字符串互为变位词。比如,”heart”与”earth”互为变位 词,”Mary”与”arMy”也互为变位词。

  s=list(input())
m=list(input())
count=0
for i in range(len(s)):
    if s.count(s[i])==m.count(s[i]):
        count+=1
if count == len(s):
    print("yes")
else:
    print("no")

  *7-22 查验身份证 (15分)

一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:

首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:

Z:0 1 2 3 4 5 6 7 8 9 10
M:1 0 X 9 8 7 6 5 4 3 2

现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。

  # student 1
'''
def judge(mlist, jlist, flist):
    sum = 0
    x = 0
    lnum = mlist[-1]
    mlist = mlist[:17]

    for i in mlist:
        if i >= '0' and i <= '9':
            sum += int(i) * flist[x]
            x += 1
        else:
            return False
    re = sum % 11
    if jlist[re] == lnum:
        return True
    else:
        return False

num = int(input())
cnt = 0
jlist = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
flist = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
for i in range(num):
    mlist = input()
    if judge(mlist, jlist, flist) == False:
        print(mlist)
    else:
        cnt = cnt + 1
if cnt == num:
    print("All passed")
'''
# my code

n = int(input())
h = []
T = True
weight=['7','9','10','5','8','4','2','1','6','3','7','9','10','5','8','4','2','0']
dict={'0':'1','1':'0','2':'X','3':'9','4':'8','5':'7','6':'6','7':'5','8':'4','9':'3','10':'2'}
for i in range(n):
    h.append(input())
for i in h:
    t = True
    for j in range(17):
        if not(i[j].isdigit()):
            t = False; break
    if not t:
        T = False; print(i)
        continue
    s=0
    for u in range(17):
        s = (s+int(i[u])*int(weight[u])) % 11
        v = dict[str(s)]
    if v != i[17]:
        T = False; print(i)
if T:
    print('All passed')

# student 3
'''
num=int(input())
sfz=[]
m=0
j=0
sc=[]
for i in range(0,num) :#输入身份证
    sfz.append(input())
sfz2=sfz[:]#复制备用
for i in range(0,num) :
    while j<=16 :
        if 48>ord(str(sfz[i][j])) or ord(str(sfz[i][j]))>57 : #用ord函数排除掉前17位有非数字的存在
            sc.append(sfz[i])
            break
        j=j+1
    j=0
for i in sc:
    sfz.remove(i)#把前17位不是数字的身份证号去掉
for i in range(0,len(sfz)) :#一长串验证M和Z的关系
    for m in range(0,17) :
            z = int\
            ((7 * (int(sfz[i][0])) + 9 * (int(sfz[i][1])) + 10 * (int(sfz[i][2])) + 5 * (int(sfz[i][3])) \
            + 8 * (int(sfz[i][4])) + 4 * (int(sfz[i][5])) + 2 * (int(sfz[i][6])) + 1 * (int(sfz[i][7])) \
            + 6 * (int(sfz[i][8])) + 3 * (int(sfz[i][9])) + 7 * (int(sfz[i][10])) + 9 * (int(sfz[i][11])) \
            + 10 * (int(sfz[i][12])) + 5 * (int(sfz[i][13])) + 8 * (int(sfz[i][14])) + 4 * (int(sfz[i][15]))\
            + 2 * (int(sfz[i][16]))) % 11)
            if z == 2 and sfz[i][17] != 'X' :
               # print(str(sfz[i]))
                sc.append(sfz[i])
                break
            elif (z != 2 and str((12 - z) % 11) != sfz[i][17]) :
                sc.append(sfz[i])
                break
if sc==[] :#考虑全部正确的情况
    print('All passed')
sfz3=sfz2[:]#这个时候想办法把最后结果要输出的错误的身份证号排序,采用删除掉原序列里正确的身份证号的方法
for i in sc :
    sfz2.remove(i)
for i in sfz2:
    sfz3.remove(i)
for i in sfz3 :
    print(i)
'''
# student 4
'''
c = int(input())
list2 = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
list1 = []
d = ['1', '0', '9', '8', '7', '6', '5', '4', '3', '2']
weight = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
k = 0
flag = True
for i in range(1, c + 1):
    n = list(input())
    for r in n[:17]:
        if r not in d:
            flag = False
            break
    if flag:
        s = 0
        for i in range(0, 17):
            s = s + weight[i] * int(n[i])
        h = s % 11
        m = list2[h]
        if m != n[17]:
            list1.append(''.join(n))
        else:
            k = k + 1
    else:
        list1.append(''.join(n))
if len(list1) == 0:
    print('All passed')
else:
    for p in list1:
        print(p)
'''
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值