80、字符串匹配
题目要求:
判断短字符串是否在长字符串中出现
注意:虽然题目说只会输入两个字符串,但是不加while还是会错,所以应该吧while设为框架
ps:字符串的 in 操作,只有切片完全一致才为true,乱序false
while True:
try:
x = input()
y = input()
flag = True
for s in x:
flag = flag and (s in y)
print('true' if flag else 'false')
except:
break
81、真分数化为埃及分数
埃及分数:分子为1的分数,就是要求将分数拆为多个分子为1的分式
方法:
分数的贪心算法,准确的算法表述应该是这样的:
1、设某个真分数的分子为a,分母为b;
2、把c=(b/a+1)作为分解式中第一个分数的分母;
3、将a-b%a作为新的a;
4、将b*c作为新的b;
5、如果a等于1,则最后一个分数为1/b,算法结束;
6、如果a大于1但是a能整除b,则最后一个分数为1/(b/a),算法结束;
否则重复上面的步骤。
while True:
try:
a = input().split('/')
up = int(a[0])
down = int(a[1])
res = '' # 返回值
while up != 1:
if down%(up-1) == 0:
res = res + '1/' + str(down//(up-1)) + '+'
up = 1
else:
q = down//up
res = res + '1/'+ str(q+1) + '+'
up = up - down%up
down = down*(q+1)
if down%up == 0:
down = down//up
up = 1
res = res + '1/' + str(down)
print(res)
except:
break
82、列表操作
主要是二维表格的增删查改
增加:append、insert
删除:remove(value)、pop(index)
m,n=list(map(int,input().split())) # map:函数 迭代器
exchange=list(map(int,input().split()))
83、大写字母的个数:
‘A’.isupper()
‘A’ <= s <= ‘Z’
84、最大回文子串的长度
理论支持:每当增加一个新的字母,最大回文串的长度只能增加1或者2,不可能增加更多,并且,新的最大回文串必然要包含这个字母!
所以,从头到尾扫描字符串,每增加一个新的字符,判断以这个字符结尾,且长度为maxLen+1或者maxLen+2的子串是否为回文,如果是,
更新最大回文子串。代码如下:
def longestPalindrome(s):
if s==s[::-1]:return len(s)
maxLen=0
for i in range(len(s)):
if i-maxLen>=1 and s[i-maxLen-1:i+1]==s[i-maxLen-1:i+1][::-1]:
maxLen+=2
continue
if i-maxLen>=0 and s[i-maxLen:i+1]==s[i-maxLen:i+1][::-1]:
maxLen+=1
return maxLen
while True:
try:
a=input()
if a:
print(longestPalindrome(a))
except:
break
85、最长重复值
输入一个byte数字,唬人的,就是input然后int处理一下。输出最长连续的1的个数
直接用 in
while True:
try:
n = int(input())
n2 = bin(n)[2:]
li = list(range(len(n2)))
li.reverse()
for i in li:
s = '1' * (i+1)
if s in n2:
print(len(s))
break
except:
break
86、密码强度等级
知识点:acall匹配(数字、大写字母、小写字母、符号)
isupper()、islower()、isalpha()、isdigit()
也可以直接用大于小于等判定
核心部分如下:
alpha_list = []
digit_list = []
symbol_list = []
for i in s:
if i.isalpha():
alpha_list.append(i)
if i.isdigit():
digit_list.append(i)
else:
symbol_list.append(i)
l=[0,0]
for i in alpha_list:
if ord(i) in range(97,123):
l[0]=1
if ord(i) in range(65,91):
l[1]=1
87、扑克牌大小
逻辑问题,典型的华为考题,有时间可以做一下
88、24点游戏标准答案是用穷举的办法,但是我觉得可以用背包来求解
89、ip合法性检查
方法1:正则匹配
方法2: 点分之后和0、255比较
while True:
try:
nums = list(map(int, input().split(".")))
flag = 0
for i in range(len(nums)):
if nums[i] < 0 or nums[i] > 255:
flag = 1
else:
pass
if flag == 0:
print("YES")
else:
print("NO")
except:
break
90、动规棋盘路径搜索
91、简单动规