7-1 sdut-字符串排序

一行内输入N个字符串,按字典序从小到大进行排序后输出。

输入格式:

输入数据有一行,分别为N个字符串,用空格分隔,每个字符串长度不超过100。

输出格式:

输出排序后的字符串,用空格分隔。

输入样例:

abcd cdef bcde 21321321 adfakf hello python regex

输出样例:

21321321 abcd adfakf bcde cdef hello python regex

答案:

ls=list(input().split())
# 原地排序
ls.sort()
# 将列表的元素单独提取出来,并用空格分隔
print(*ls,sep=' ')

7-2 sdut-字符之比较大小

输入3个不同整数,这3个整数分别对应3个字母的ASCII码值,把这3个字母按它的ASCII码值从小到大输出。

输入格式:

输入在一行中给出3个整数,其间以空格分隔。

输出格式:

在一行中将3个字母按ASCII码值从小到大输出,其间以“<”相连。

输入样例:

97 65 100

输出样例:

A<a<d

答案:

a,b,c=map(int,input().split())
ls=[chr(a),chr(b),chr(c)]
# 原地排序
ls.sort()
print(*ls,sep='<')

7-3 sdut-判断回文字符串

回文就是字符串中心对称,从左向右读和从右向左读的内容是一样的。

输入一个字符串,判断该字符串是否为回文,只考虑数字和字母字符,字母的大小写没有区别。

输入格式:

输入一个字符串。

输出格式:

判断字符串是否为回文,若是,则在一行内输出yes,否则输出no。

输入样例:

A man,a plan; cnalPanama

输出样例:

yes

答案:

s=str(input())
# 将输入字符串的所有字母都转换为大写
n=s.upper()
# 创建一个用来存放过滤后(删去非字母和数字)的字符的空列表
ls=[]
for i in n:
    # 如果这个字符是字母或数字:
    if i.isalnum():
        ls.append(i)
if ls==ls[::-1]:
    print("yes")
else:
    print("no")

7-4 sdut-删除字符

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

提示:去掉输入的字符串或字符两端的空格。

输入格式:

第一行中输入一行字符串str;
第二行输入待删除的字符 c。

输出格式:

在一行内输出删除指定字符c后的字符串。形式为:result: *****。

输入样例1:

7!jdk*!ASyu

!

输出样例1:

result: 7jdk*ASyu

输入样例2:

Bee

E

输出样例2:

result: B

答案:

# strip():去除字符串两端的空白字符
s=input().strip()
c=input().strip()
# 如果c是字母,就要去掉小写与大写两种形态
if c.isalpha():
    s=s.replace(c.upper(),'').replace(c.lower(),'')
# 如果c不是字母,直接去掉
else:
    s=s.replace(c,'')
print("result: %s"%s)

7-5 sdut-逆序的N位数

读入一个正整数,(介于0与9223372036854775807之间)(前后可能有空白字符—空格或者Tab字符),位数不限,然后输出按位逆序的数字。

注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出7。

输入格式:

输入一个正整数。

输出格式:

输出按位逆序的数。

输入样例1:

123456789

输出样例1:

987654321

输入样例2:

10000000

输出样例2:

1

输入样例3:

0000000

输出样例3:

0

答案:

# int()会将输入的字符转换成整数,去掉开头的0
print( int( input()[::-1] ) )
# 不能拆开写是因为int不支持切片操作[::-1]

7-6 sdut-输出字符串中最大字符及其索引位置

输入字符串,排序后输出最大字符及该字符在原字符串中的索引。

相同字符的索引取最大值。

输入格式:

一行输入字符串。

输出格式:

在一行内输出最大字符及其最大索引位置。字符和数字间有3个空格。

输入样例1:

Hello Python

输出样例1:

y 7

输入样例2:

HELLO EVERYONE YEAR 2021

输出样例2:

Y 15

答案:

ls=list(input())
# 求出字符串中的最大字符
c=max(ls)
# 求出c在原字符串中的最大索引位置
n=len(ls)-1-ls[::-1].index(c)
print("%s   %d"%(c,n))

7-7 sdut-计算多个字符串中最长的字符串长度

有n(1<n<=10)个字符串,计算最长的字符串的长度。

注意:前导及尾部空格不计算在内!

输入格式:

在第一行中输入n,接下的每行输入一个字符串。

输出格式:

在一行中输出最长的字符串的长度,形式为:length=?。

输入样例:

4

blue

yellow

red

green

输出样例:

length=6

答案:

n=int(input())
num=0
for i in range(n):
    # 去除字符串的空格
    s=input().strip()
    l=len(s)
    if l>num:
        num=l
print("length=%d"%num)

7-8 sdut-十进制数转换成二进制后1和0的个数

输入一个非负整数,求它变成二进制后1和0的个数。

(PYTHON实现提示:用bin函数转换为二进制数,前缀0b不在统计范围内)。

输入格式:

输入一个十进制的正整数。

输出格式:

输出二进制数中1和0的个数。中间用1个空格分开。

输入样例1:

37

输出样例1:

3 3

输入样例2:

0

输出样例2:

0 1

答案:

import math
n=int(input())
# 去除num的前缀0b
num=bin(n)[2:]
ls=list(num)
cnt1=0
cnt0=0
for i in range(len(ls)):
    # 注意,要比较的是ls[i]
    if ls[i]=='1':
        cnt1+=1
    elif ls[i]=='0':
        cnt0+=1
print("%d %d"%(cnt1,cnt0))

7-9 sdut-整数的二进制相加

输入两个整数,大小在[0,63]之间。求它们的和,对二进制形式展示数据。

二进制用8位表示。

输入格式:

在一行输入一个十进制整数,在第二行输入另一个十进制整数。

输出格式:

求它们和,并输出数据的二进制形式。

输入样例:

5

7

输出样例:

00000101

00000111

--------

00001100

答案:

import  math
a=int(input())
b=int(input())
n=a+b
num1=bin(a)[2:]
num2=bin(b)[2:]
num3=bin(n)[2:]
# 二进制用8位表示
# 记得用int()限定转换num
print("%08d"%int(num1))
print("%08d"%int(num2))
print("--------")
print("%08d"%int(num3))

7-10 sdut-汉明距离

两个整数间的汉明距离指的是这两个数对应二进制位不同的位置的数目。

输入两个整数x,y, 0<=x,y<=231 。输出x,y的汉明距离。

输入格式:

在一行输入x,y;中间有一个空格。

输出格式:

在一行内 输出x与y的汉明距离。

输入样例:

1 4

输出样例:

在这里给出相应的输出。例如:

2

答案:

import math
x,y=map(int,input().split())
# ^计算x和y的异或结果,count计算其不同的的位数
n=bin(x^y).count('1')
print(n)

7-11 sdut-输出一个字符串的字符的16-10-8-2进制数

输入一行字符串,去掉非16进制字符,将它转换成16、10、8、2进制数,输出。

输入格式:

输入一行字符串。

输出格式:

输出转换后的16、10、8、2进制数。数据之间有1个空格。(16进制字母小写)

输入样例:

_ahg1*B

输出样例:

a1b 2587 5033 101000011011

答案:

# 将输入的一行字符串转换为列表
ls=list(input())
# 合法的16进制字符
l1='1234567890abcdefABCDEF'
# 存储接下来过滤后的字符串
l2=''
for i in ls:
    if i in l1:
        l2+=i
# 16进制字母小写
s=l2.lower()
# 转换成10进制
n1=int(s,16)
# 转换成8进制
n2=oct(n1)[2::]
# 转换成2进制
n3=bin(n1)[2::]
# 默认参数间以空格分隔
print(s,n1,n2,n3)

7-12 sdut-显示数字出现次数

输入一个十进制正整数,转换成16进制数。

再输入一个数:(0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f),统计这个数出现的次数。


提示:通过hex()函数转换为十六进制数,十六进制数的前缀0X不在统计范围内。

输入格式:

第一行输入十进制正整数n1。
第二行输入要统计的数n2。

输出格式:

输出n2在数值n1所对应的16进制数值中出现的次数。

输入样例1:

84117512

8

输出样例1:

3

输入样例2:

46883310

e

输出样例2:

2

答案:

import math
n1=int(input())
# 转换为16进制
num=hex(n1)[2:]
# 要统计的既可能是数字,也可能是字母
n2=input()
# 直接统计就好了~
cnt=num.count(n2)
print(cnt)

更多推荐