import string
defgetCount():
input_string =input()
input_target =input()# 对字符串进行处理,切分为单个字母
input_char_list =[j.lower()for i in input_string.split(' ')for j in i if j in string.ascii_letters]# 统计词频
count ={}for w in input_char_list:if w notin count:
count[w]=0
count[w]+=1return count.get(input_target.lower(),0)print(getCount())
3 明明的随机数
# coding=utf-8defnums():whileTrue:try:
n =int(input())
num_list =[int(input())for i inrange(n)]
num_list =sorted(list(set(num_list)))for i in num_list:print(i)except:break
nums()
coding = utf-8defmain(input_string):
temp =[i for i in input_string]iflen(temp)<=8:
res =''.join(temp)+'0'*(8-len(temp))print(res)else:print(''.join(temp[:8]))
main(temp[8:])if __name__ =='__main__':whileTrue:try:
input_string =input()
main(input_string)except:break
13
将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符
whileTrue:try:
val =input()
tmp = val.split(";")
x,y =0,0
comp =set("1234567890")for i in tmp:ifnot i or i[0]notin["A","D","W","S"]orset(i[1:]).issubset(set("1234567890"))==False:continueelif i[0]=="A":
x -=int(i[1:])elif i[0]=="S":
y -=int(i[1:])elif i[0]=="W":
y +=int(i[1:])elif i[0]=="D":
x +=int(i[1:])print(str(x)+","+str(y))except:break
20密码验证合格程序
defcheckLegal(pswd):iflen(pswd)<=8:returnFalseelse:#最大重复子串长度2+
sub =[]for i inrange(len(pswd)-2):
sub.append(pswd[i:i+3])iflen(set(sub))<len(sub):returnFalse#check type
type_ =0import re
Upper ='[A-Z]'
Lowwer ='[a-z]'
num ='\d'
chars ='[^A-Za-z0-9_]'
patterns =[Upper, Lowwer, num, chars]for pattern in patterns:
pw = re.search(pattern, pswd)if pw : type_ +=1returnTrueif type_ >=3elseFalsewhileTrue:try:
pswd =input()print('OK'if checkLegal(pswd)else'NG')except:break
23 删除字符串中出现次数最少的字符
# coding = utf-8defmain(input_string):
count ={i:input_string.count(i)for i in input_string}
min_count =min(count.values())for i in count.keys():if count[i]== min_count:
input_string = input_string.replace(i,'')return input_string
if __name__ =='__main__':whileTrue:try:
input_string =input()print(main(input_string))except:break
import re
# 构造函数加密字符,如果是[0-9A-Fa-f]则按规则返回加密值,否则返回原始值defencrypt(x):if re.search(r'[0-9A-Fa-f]', x):returnhex(int(bin(int(x,16))[2:].rjust(4,'0')[::-1],2))[2:].upper()"""
1. int(x, 16) - 将字符x转成16进制
2. bin(int(x, 16))[2:].rjust(4,'0')[::-1] - 继续将十六进制转成二进制,并去除二进制开头"0b",如果二进制长度小于4,则在前面补0至四位,然后再倒序。
比如bin(int('7', 16))输出0b111,[2:]去除0b后为111,rjust(4,'0')左侧补0则变为0111,[::-1]倒序后变为二进制的1110
3. hex(int(i,2)[2:].upper() - 其中i表示注释2的内容。这一步是将上一步获取的二进制转成十六进制,并去除开头的"0x",最后再将其转成大写。
"""else:return x
whileTrue:try:
a =list(input().replace(" ",""))# 去除输入中的空格,并将输入的字符处理成列表
a[::2]=sorted(a[::2])# 奇数位置从小到大排序
a[1::2]=sorted(a[1::2])# 偶数位置从小到大排序
res =""for i in a:
res += encrypt(i)# 调用加密函数,遍历输出结果print(res)except:break
32密码截取
whileTrue:try:
s =input()deffindlen(s):
n =len(s)if n <2:return s
maxlen =1deffinder(left, right):nonlocal maxlen
while left >=0and right < n and s[left]== s[right]:
left -=1
right +=1# 退出循环的时候正面两边不满足条件,但是left和right需要用扩展前的if right - left -1> maxlen:
maxlen = right - left -1for i inrange(n):
finder(i, i)
finder(i, i +1)return maxlen
ret = findlen(s)print(ret)except:break
33 整数与IP地址间的转换
whileTrue:try:
ip =str(input()).split('.')
num =int(input())
res1 =''
res2 =[]for i in ip:
res1 +="{:08b}".format(int(i))print(int(res1, base=2))
temp ="{:032b}".format(num)for i inrange(4):
res2.append(str(int(temp[:8], base=2)))
temp = temp[8:]print('.'.join(res2))except:break
39 判断两个IP是否属于同一子网
import sys
#判断ip是否合法,判断每段是否在0-255之间defcheck_ip(ip):
ips =list(map(int,ip.split('.')))iflen(ips)<4:returnFalsefor i in ips:if i <0or i >255:returnFalsereturnTrue#判断掩码是否合法#先判断是否每段在0-255之间defcheck_mask(mask):ifnot check_ip(mask):returnFalse
masks =list(map(int, mask.split('.')))
mask_str =""for m in masks:#转成二进制形式的字符串,注意左边要用0补够8位
mask_str +=bin(m)[2:].rjust(8,'0')
index = mask_str.index('0')# print(mask_str)# print(index)#如果0后面还有1,就是非法if-1!= index:if'1'in mask_str[index:]:returnFalsereturnTruedefconvert_int(ipstr):
ips =list(map(int, ipstr.split('.')))
ipnum =0for ip in ips:
ipnum = ip +(ipnum <<8)return ipnum
#判断是否同一子网#ip分别与掩码与,再对比defcheck_ziwang(mask, ip1, ip2):
mm = convert_int(mask)
ipnum1 = convert_int(ip1)
ipnum2 = convert_int(ip2)# print(mm & ipnum1)# print(mm & ipnum2)return(mm & ipnum1)==(mm & ipnum2)whileTrue:try:
mask =input()
ip1 =input()
ip2 =input()ifnot check_ip(ip1)ornot check_ip(ip2)ornot check_mask(mask):print("1")elif check_ziwang(mask, ip1, ip2):print("0")else:print("2")except:# print(sys.exc_info())break
41 称砝码
# 第二行:m1 m2 m3 ... mn --- 每个砝码的重量(范围[1,2000]) 每种吧?!# 第三行:x1 x2 x3 .... xn --- 每个砝码的数量(范围[1,6])while1:try:
n=int(input())
zl=list(map(int,input().split()))
sl=list(map(int,input().split()))
n_class =len(zl)if n_class==1:print(sl[0]+1)continue
big_lt=[[zl[i]*s for s inrange(0, sl[i]+1)]for i inrange(n_class)]for i inrange(n_class-2):# merge_two_lt
merged=set((0,))#这里如果用list存数据,超时。可能是因为多了一个判断 :是否在list里#用set则将原本的2s,缩短至50ms左右。for ele_q in big_lt[0]:for ele_h in big_lt[1]:
merged.add(ele_q+ele_h)
big_lt.pop(0)
big_lt[0]= merged
merged=set((0,))for ele_q in big_lt[0]:for ele_h in big_lt[1]:
merged.add(ele_q+ele_h)print(len(merged))except Exception as e:ifnotisinstance(e,EOFError):print('leo_you_have_Error: ', e)break
classNode(object):def__init__(self, val=0):
self.val = val
self.next=NonewhileTrue:try:
l, s, k, head =int(input()),list(map(int,input().split())),int(input()), Node()while k:
head.next= Node(s.pop())
head = head.next
k -=1print(head.val)except:break
58 输入n个整数,输出其中最小的k个
# coding = utf-8defmain(num_list, k):
num_list.sort()return' '.join([str(i)for i in num_list[:k]])if __name__ =='__main__':whileTrue:try:
nums, k =map(int,input().split())
num_list =[int(i)for i ininput().split()]print(main(num_list, k))except:
68 成绩排序
defmain(N, M, name_dict):if M ==0:
name_list =sorted(name_dict.items(), key =lambda x:int(x[-1][-1]), reverse =True)for i in name_list:for j in name_list:if i[-1][-1]== j[-1][-1]:if i[0]< j[0]:
i,j = j,i
else:
name_list =sorted(name_dict.items(), key =lambda x:int(x[-1][-1]))for i in name_list:for j in name_list:if i[-1][-1]== j[-1][-1]:if i[0]> j[0]:
i,j = j,i
# [(0, ['fang', '90']), (2, ['ning', '70']), (1, ['yang', '50'])]return name_list
if __name__ =='__main__':whileTrue:try:
N =int(input())
M =int(input())
name_dict ={}for i inrange(N):
name_dict[i]=input().split()
name_list = main(N, M, name_dict)for i in name_list:print(i[-1][0]+' '+i[-1][-1])except:break
77 火车进站
defcal(x,s):if x ==1:return[[s[0],s[0]]]#只有一辆车时递归终止else:
res =[]for i in cal(x-1,s[0:x-1]):
add = i.index(s[x-2])#获得x-1辆车的操作序列中第x-1辆车编号第一次出现时的下标for j inrange(add+1,len(i)+1):#在第x-1辆车编号第一次出现之后的任意位置均可插入连续的第x辆车编号获得新序列
temp = i[:]
temp.insert(j,s[x-1])
temp.insert(j,s[x-1])
res.append(temp)return res
whileTrue:try:
n =int(input())
sou =[int(x)for x ininput().split()]
ans = cal(n,sou)#得到操作序列for i in ans:for j inrange(1,n+1):
i.remove(j)#删除每辆车编号的第一次出现
ans.sort()for i in ans:print(' '.join([str(x)for x in i]))except:break
whileTrue:try:
input_string1 =input()
input_string2 =input()iflen(input_string1)>len(input_string2):
input_string1, input_string2 = input_string2, input_string1
input_string1_list =list(set(list(input_string1)))
flag =0for i in input_string1_list:if i notin input_string2:
flag =1if flag ==1:print('false')else:print('true')except:break
92 在字符串中找出连续最长的数字串
#coding = utf-8import re
defmain(input_string):
nums_dict ={}
tmp = re.findall(r'\d+', input_string)for i in tmp:
nums_dict[i]=len(i)
nums_dict =sorted(nums_dict.items(), key =lambda x:x[-1], reverse =True)# 找到相同长度的最长串
res =[]for i in nums_dict:if i[-1]== nums_dict[0][-1]:
res.append(i)return res
if __name__ =='__main__':whileTrue:try:
input_string =input()
res = main(input_string)
tmp =''for i in res:
tmp +=str(i[0])print(tmp+','+str(res[0][-1]))except:break
# coding = utf-8defmain(n, name_list, people, vote_list):
ticket_dict =dict(zip(name_list,[0for i inrange(len(name_list))]))for i in vote_list:if i in ticket_dict.keys():
ticket_dict[i]+=1# 统计有效投票和无效投票
valid =sum(list(ticket_dict.values()))
invalid = people - valid
# 输出for k, v in ticket_dict.items():print(k,':',v)print('Invalid :',invalid)if __name__ =='__main__':whileTrue:try:
n =int(input())
name_list =input().split()
people =int(input())
vote_list =input().split()
main(n, name_list, people, vote_list)except:break
95人民币转换
deffunc(x)->str:
res =[]
zero_pre =False# 确保在连续‘0’的情况下,只有一个'零'for i, xi inenumerate(x[::-1]):# 倒着转化if xi=='0':ifnot zero_pre:
res.append(num[int(xi)])
zero_pre =Trueelse:
zero_pre =False
res.extend([pro[i], num[int(xi)]])
res = res[::-1]# print(res)while res[-1]=='零':# 去掉后面所有的 ”零“
res.pop()return''.join(res).replace('壹拾','拾')
num =['零','壹','贰','叁','肆','伍','陆','柒','捌','玖']
pro =['','拾','佰','仟','万','亿','元','角','分','整']whileTrue:try:
n, m =input().strip().split('.')
res =['人民币']iflen(n)>8:
res.append(func(n[:-8])+'亿')iflen(n)>4:
res.append(func(n[-8:-4])+'万')if n!='0':
res.append(func(n[-4:])+'元')if m=='00':
res.append('整')else:if m[0]>'0':
res.append(num[int(m[0])]+'角')if m[1]>'0':
res.append(num[int(m[1])]+'分')print(''.join(res))except:break
97记负均正
# codig = utf-8defmain(n, nums_list):
pos =[]
neg =[]for i in nums_list:if i>0:
pos.append(i)if i <0:
neg.append(i)# print(neg)# print(pos)print(len(neg),round(sum(pos)/len(pos),1))if __name__ =='__main__':whileTrue:try:
n =int(input())
nums_list =list(map(int,input().split()))
main(n, nums_list)except:break
import re
error_pattern = re.compile(r'1+0+')
A_pattern = re.compile(r'((12[0-6]|1[0-1]\d|[1-9]\d|[1-9])\.)((1\d\d|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.){2}(1\d\d|2[0-4]\d|25[0-5]|[1-9]\d|\d)')
B_pattern = re.compile(r'(12[8-9]|1[3-8]\d|19[0-1])\.((1\d\d|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.){2}(1\d\d|2[0-4]\d|25[0-5]|[1-9]\d|\d)')
C_pattern = re.compile(r'(19[2-9]|2[0-1]\d|22[0-3])\.((1\d\d|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.){2}(1\d\d|2[0-4]\d|25[0-5]|[1-9]\d|\d)')
D_pattern = re.compile(r'(22[4-9]|23\d)\.((1\d\d|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.){2}(1\d\d|2[0-4]\d|25[0-5]|[1-9]\d|\d)')
E_pattern = re.compile(r'(24\d|25[0-5])\.((1\d\d|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.){2}(1\d\d|2[0-4]\d|25[0-5]|[1-9]\d|\d)')
self_pattern = re.compile(r'((10\.((1\d\d|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.){2}(1\d\d|2[0-4]\d|25[0-5]|[1-9]\d|\d))|(172\.(1[6-9]|2\d|3[0-1])\.(1\d\d|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d\d|2[0-4]\d|25[0-5]|[1-9]\d|\d))|(192\.168\.(1\d\d|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d\d|2[0-4]\d|25[0-5]|[1-9]\d|\d)))')
escape = re.compile(r'((0|127)\.((1\d\d|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.){2}(1\d\d|2[0-4]\d|25[0-5]|[1-9]\d|\d))')defjudge_error(line):if line =='255.255.255.255'or line =='0.0.0.0':return0
judge = line.split('.')
res =''for j in judge:
res +='{:0>8b}'.format(int(j))
res = re.fullmatch(error_pattern, res)if res ==None:return0else:return1defjudge(pattern, line):if re.fullmatch(pattern, line)!=None:return1else:return0
stack =[0]*7whileTrue:try:
line =input().split('~')if judge_error(line[1]):if judge(self_pattern, line[0]):
stack[6]+=1if judge(A_pattern, line[0]):
stack[0]+=1elif judge(B_pattern, line[0]):
stack[1]+=1elif judge(C_pattern, line[0]):
stack[2]+=1elif judge(D_pattern, line[0]):
stack[3]+=1elif judge(E_pattern, line[0]):
stack[4]+=1elif judge(escape, line[0]):continueelse:
stack[5]+=1else:
stack[5]+=1except:print(' '.join([str(i)for i in stack]))break
19 简单错误记录
dic ={}
rank =1whileTrue:try:file=input().split("\\")[-1].split()
filename, line =file[0],int(file[1])if(filename, line)notin dic:
dic[(filename, line)]=[1, rank]
rank +=1else:
dic[(filename, line)][0]+=1except:# print("dic", dic)# res = sorted(dic.items(),reverse=True) # 按照value进行升序排列# reversedic = dict(([v, k] for (k, v) in dic.items())) 这是字典key,value两者之间的翻转
newdic =sorted(dic.items(), key =lambda x:x[1][1])[-8:]# 按照输入顺序升序排列,越早输入的越在前,并且选择后8个就行# print(newdic)
i =0for key, value in newdic:# 遍历即可
i +=1if i >8:breakelse:print(key[0][-16:], key[1], value[0])break
27 查找兄弟单词
#判断是否兄弟单词defcheckXD(word, x):iflen(w)!=len(x)or w == x:returnFalseifsorted(word)==sorted(x):returnTruereturnFalsewhileTrue:try:
ss =input().split()
n =int(ss[0])
words = ss[1: n +1]
x = ss[n +1]
k =int(ss[n +2])# print(n,words,x, k)
xiwords =[]for w in words:if checkXD(w, x):
xiwords.append(w)
xiwords.sort()print(len(xiwords))#如果越界,就不输出if k <=len(xiwords):print(xiwords[k -1])except:break
28 素数伴侣
defgetPrimes(n):"""获取2~n之间的素数,用于对素数进行判断"""
primes =[Truefor _ inrange(n+1)]for i inrange(2, n+1):if primes[i]:yield i
for j inrange(i+i, n+1, i):
primes[j]=FalsedefsplitNums(nums):"""用于将数字分为奇数和偶数部分"""
odd =[]
even =[]
oddLen =0
evenLen =0for num in nums:if num %2==0:
even.append(num)
evenLen +=1else:
odd.append(num)
oddLen +=1return odd, oddLen, even, evenLen
defremoveValue(data, n, i, k):"""从data的第i行开始去掉数字i"""for j inrange(i, n):if k in data[j]:
data[j].remove(k)return data
defcountValue(data, n, i, d):"""统计data从i行开始,d中的元素总共出现的次数"""
d ={k:0for k in d}for j inrange(i, n):for value in data[j]:if value in d:
d[value]+=1return d
deffunc(nums):
odd, oddLen, even, evenLen = splitNums(nums)
maxGroup =min(oddLen, evenLen)if maxGroup ==0:# 如果没有奇数或者偶数,那么直接必定不会出现素数伴侣return0
primes =list(getPrimes(max(odd)+max(even)))# 每一行代表1个偶数,每一列代表一个奇数# 此处得到每个一行的偶数能和哪几个奇数组成素数伴侣
data =[[j for j inrange(oddLen)if even[i]+ odd[j]in primes]for i inrange(evenLen)]
data =[row for row in data if row]# 去掉不能和任何数字组成伴侣的偶数行ifnot data:# 为空表示没有任何偶数能和奇数组成伴侣return0
stack =[]# 存储结果用容器
n =len(data)for i inrange(n-1):# 分别对每一行进行迭代,判断改行是否符合一下的某一种情况(最后1行不需要判断,直接取最后1行的第一个数据即可)# 1 如果这一行为空,那么直接忽略这一行# 2 这一行只能和1个奇数 K 组成伴侣,那么就取这个偶数和K组成伴侣# 3 若这一行可以和多个奇数组成伴侣,那么去查找K,要求:后面行重复使用到K的次数最少# 4 去掉后面行用到的K# 5 若出现情况如:[[1,2], [1], [2, 3], [2, 4]],避免第一行取到1,# 在每一次取数之前,将数据按照候选奇数的多少依次排列
data = data[:i]+sorted(data[i:], key=lambda x:len(x))iflen(data[i])==0:continueiflen(data[i])==1:
stack.append(data[i][0])
data = removeValue(data, n, i+1, data[i][0])continue
d = countValue(data, n, i+1, data[i])
minValue = data[i][0]
c = d[minValue]if c ==0:
stack.append(data[i][0])
data = removeValue(data, n, i+1, data[i][0])continuefor k, v in d.items():if v < k:
minValue = k
c = v
stack.append(minValue)if c ==0:continue
data = removeValue(data, n, i+1, minValue)if data[-1]:# 最后1行不需要判断,直接取最后1行的第一个数据即可
stack.append(data[-1][0])returnlen(stack)whileTrue:try:
n =int(input())
nums =list(map(int,input().strip().split()))print(func(nums))except EOFError:break
44Sudoku
defmyprint(matrix):for i inrange(9):print(" ".join(list(map(str,matrix[i]))))deffind_zeros(matrix):
result =[]for i inrange(9):for j inrange(9):if matrix[i][j]==0:
result.append([i,j])return result
defisend(matrix):for l in matrix:if0in l:returnFalsereturnTruedeffind_neighbors(matrix,i,j):
result =[]
result.append(matrix[i])
result.append([matrix[k][j]for k inrange(9)])
result.append([matrix[k][l]for k inrange((i//3)*3,(i//3)*3+3) \
for l inrange((j//3)*3,(j//3)*3+3)])return result
defdfs(matrix, zeros):ifnot zeros:
myprint(matrix)return-1
n, now =len(zeros), zeros[0]
neibor = find_neighbors(matrix,now[0],now[1])for i inrange(1,10):if i notin neibor[0]and i notin neibor[1]and i notin neibor[2]:
matrix[now[0]][now[1]]= i
y = dfs(matrix, zeros[1:n])if y ==0:
matrix[now[0]][now[1]]=0continuereturn0
matrix =[]for i inrange(9):
s =list(map(int,input().split()))
matrix.append(s)
dfs(matrix, find_zeros(matrix))
82将真分数分解为埃及分数
from fractions import Fraction
whileTrue:try:
target = Fraction(input())
mother = target.denominator
l =[]#存放埃及分母
n=2while target.numerator !=1:if target > Fraction(1,n):
l.append(str(n))
target = target - Fraction(1,n)if n >= mother:
n += mother
else:
n +=1
l.append(str(target.denominator))print('1/'+'+1/'.join(l))except:break