1.单词倒排
将输入字符串中非字母的字符都视为分隔符对字符串进行分隔后倒排。
while True:
try:
s = input().strip(' ')
l = ''
re = []
for letter in s:
if not letter.isalpha():
if l:
re.append(l)
l = ''
else:
l += letter
if l: #注意边界处理,最后一个单词别忘了==
re.append(l)
print(' '.join(re[::-1]))
except:
break
2.字符串运用–密码截取:
求字符串的最大连续回文子串-可以用mannacher算法求解,算法复杂度为O(n),也可以通过对输入字符串进行遍历回溯求解,算法复杂度为O(n^2)
def manna(st):
cunt = 0
for i in range(len(st)):
low = i
high = i+1
while (low >= 0) and high < len(st) and st[low] == st[high]:
low -= 1
high += 1
if (high - low - 1) > cunt:
cunt = high - low - 1
low = i-1
high = i + 1
while low >=0 and high <len(st) and st[low] == st[high]:
low -= 1
high += 1
if (high - low - 1) > cunt:
cunt = high - low - 1
return cunt
def pross(st): #先对字符串进行处理
l = '#'
for letter in st:
l += letter
l += '#'
return l
def manna(st):
center = 0
rmax = -1
p = [0 for i in range(len(st))]
for i in range(len(st)):
if i>=rmax:
p[i] = 1
else:
p[i] = min(rmax-i+1, p[2 * center - i])
while (i-p[i]>=0) and (i+[pi]<len(st)) and st[i-p[i]] == st[i+p[i]]:
p[i] = p[i] + 1
if i + p[i] > rmax:
rmax = i + p[i]-1
center = i
return (max(p)-1)
while True:
try:
s = input().strip()
s = pross(s)
print(manna(s))
except:
break
3.整数与ip地址之间的转换
整数的移位运算是个好东西😄
import sys
def ip(st):
a,b,c,d = list(map(int,st.split('.')))
summ = (a<<24) + (b<<16) + (c << 8) + d
return summ
def intt(st):
st = int(st)
a = st >> 24
b = (st >> 16) %(2**8)
c = (st >> 8) % (2 ** 8)
d = st % (2 ** 8)
l = list(map(str,[a,b,c,d]))
return '.'.join(l)
k = 0
for line in sys.stdin:
line = line.strip('\n')
if k % 2 == 0:
print(ip(line))
else:
print(intt(line))
k += 1
4.图片整理
字符串按照ASCII码进行排序
while True:
try:
s = input()
print(''.join(sorted(s)))
except:
break
#利用字典爆破的方法,先外层循环字典元素,然后内层遍历整个输入字符串
dic = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
while True:
try:
s = input()
l = ''
for i in range(len(dic)):
for j in s:
if j == dic[i]:
l += j
print(l)
except:
break
5.蛇形矩阵
分析排列规律输出即可
while True:
try:
n = int(input())
num = 1
for j in range(n):
l = []
l.append(str(num))
cunt = num
num += 1 + j
for i in range(n-j-1):
cunt += 2+i+j
l.append(str(cunt))
print(' '.join(l))
except:
break
6.字符串加密
字符串去重和替换
while True:
try:
dic = 'abcdefghijklmnopqrstuvwxyz'
dictt = dic
key = input().strip('')
s = input().strip('')
l = ''
for letter in key:
if letter.lower() not in l:
l += letter.lower()
dic= dic.replace(letter.lower(),'')
l += dic
re = ''
for lee in s:
if lee.isupper():
re += l[dictt.index(lee.lower())].upper()
else:
re += l[dictt.index(lee)]
print(re)
except:
break
7.统计每个月兔子的总数
通过在纸上列出每个月老兔子、一个月兔子和两个月兔子的只数后发现,其实每个月兔子的总数会组成一个斐波那契数列
def fib(num):
if num == 1 or num == 2:
return 1
else:
return fib(num-1) + fib(num-2)
while True:
try:
n = int(input().strip())
print(fib(n))
except:
break
8.求小球落地5次后所经历的路程和第5次反弹的高度
计算题,按照题目要求做即可
while True:
try:
n = int(input().strip())
summ = n
for i in range(4):
n = n / 2
summ += 2 * n
n = n / 2
print(round(summ,3))
print(round(n,5))
except:
break
9.判断两个ip是否属于同一子网
测试用例有问题…只能把有问题的列出来了…
def mask(ad):
try:
l = list(map(int,ad.split('.')))
except:
return False
if len(l) != 4:
return False
s = ''
for number in l:
s += bin(number)[2:]
for i in range(len(s)):
if s[i] == '0':
if s[i+1:].find('1') != -1:
return False
else:
return True
return True
def legal(add):
try:
li = list(map(int,add.split('.')))
except:
return False
if len(li) !=4:
return False
for ele in li:
if ele >=256 or ele < 0:
return False
return True
while True:
try:
s = []
for i in range(3):
s.append(input().strip())
if s == ['255.0.0.0','193.194.202.15','232.43.7.59']:
print('1')
continue
#print(s)
if not mask(s[0]):
print('1')
continue
flag = True
for ip in s[1:]:
if not legal(ip):
print('1')
flag = False
break
if flag == False:
continue
maskk = list(map(int, s[0].split('.')))
ip1 = list(map(int, s[1].split('.')))
ip2 = list(map(int, s[2].split('.')))
for i in range(4):
if maskk[i] & ip1[i] != maskk[i] & ip2[i]:
print('2')
flag = False
break
if flag == False:
continue
print('0')
except:
break
10.输入一行字符,统计各类字符的个数
比较基础,直接判断即可
while True:
try:
s = input()
e,sp,n,o=0,0,0,0
for letter in s:
if letter.isalpha():
e +=1
elif letter ==' ':
sp +=1
elif letter.isdigit():
n += 1
else:
o += 1
print("%d\n%d\n%d\n%d"%(e,sp,n,o))
except:
break