一共3道编程题,总体难度不高,没有出现比较难的算法,但是可能文字和逻辑理解上相对比较重要。
第一题(难度不高 AC)
按规则传播信息,输出所有可能传播的站点对 输入: A={1,3,5},B={2,4,6},R=1 输出: (1,2)(3,4)(5,6)
def Toint(list):
for i in range(len(list)):
list[i]=int(list[i])
a = input().split('=')
A = a[1].split('}')[0][1:].split(',')
Toint(A)
B = a[2].split('}')[0][1:].split(',')
Toint(B)
R = int(a[-1])
for i in A:
num=0
for j in B:
if i>j:
continue
else:
if j-i<=R:
num+=1
print('(%d,%d)'%(i,j),end='')
else:
break
if num==0:
for j in B:
if i<=j:
print('(%d,%d)' % (i, j),end='')
break
第二题(难度不高 AC)
句子按词进行反转,但是要注意各种特殊符号有不同的意义 输入: I am an 20-years out--standing @@ * -stu- dent 输出: dent stu standing out 20-years an am I
def _test(word):
key = word.split('-')
res = []
if len(key)==1:
return key
else:
# print('>',key)
i = 0
while True:
if i>=len(key)-1:
break
if key[i]!='' and key[i+1]!='':
# 可能出现多个-的连接词
res.append(key[i]+'-'+key[i+1])
i+=2
elif key[i]!='':
res.append(key[i])
i+=1
if i==len(key)-1:
if key[i]!='':
res.append(key[i])
# print(res)
return res
def test2(string):
a = []
start = 0
key = True
for i in range(len(string)):
if (string[i]>='a' and string[i]<='z') \
or (string[i]>='A' and string[i]<='Z') \
or string[i]=='-' \
or (string[i]>='0' and string[i]<='9'):
key = True
continue
else:
if key:
a.append(string[start:i])
key = False
start = i + 1
if key:
a.append(string[start:])
return a
# print('a'>='a' and 'a'<='z')
a = input().split(' ')
# print(a)
res = []
for i in a:
st = _test(i)
res.append(st)
# print(res)
res1 = []
for i in res:
for string in i:
res1.extend(test2(string))
# print(res1)
res1.reverse()
# print(res1)
result = ''
for i in res1:
if i !='':
result= result+' '+i
print(result[1:])
第三题(80% 没考虑周全)
对原有航班进行更新,但更新过程会出现覆盖更新,以及同航班座位重复问题,需要分开保存数据 采用四个字典 一字典 pace1 存储 按元组进行检索的字典 (航班,座号):姓名 ->原座位表 二字典 pace2 存取 姓名:(航班,座号)->去除了人的重复 三字典 pace3 按照二字典 反向存储 得到(航班,座号):姓名 ->去除了座位的重复 四字典 存取各个航班中的座位号 输入: 3 CZ7132,A1,ZHANGSAN CZ7132,A2,ZHAOSI CZ7156,A2,WANGWU 2 CZ7132,A1,CZ7156,A2 CZ7156,A2,CZ7156,A3 输出: CZ7132,A2,ZHAOSI CZ7156,A2,ZHANGSAN CZ7156,A3,WANGWU
# 进行字典的键值交换
def space(dic):
dict_space = {}
for i in dic.items():
# print(i)
for j in i[1]:
dict_space[j]=i[0]
return dict_space
# 进行字典的键值交换 保留了同姓名的不同航班
def space_name(dic):
dict_space = {}
for i in dic.items():
# print(i)
if i[1] not in dict_space:
dict_space[i[1]]=[i[0]]
else:
dict_space[i[1]].append(i[0])
return dict_space
N = int(input())
pace1 = {}
for i in range(N):
a = input().split(',')
pace1[(a[0],a[1])]=a[2]
pace2 = space_name(pace1)
new_pace ={}
# print(pace2)
M = int(input())
for i in range(M):
a = input().split(',')
# print(a)
name = pace1[(a[0],a[1])]
# print(name)
key = [i[0] for i in pace2[name]]
try:
inde = pace2[name].index((a[0],a[1]))
pace2[name][inde] = (a[2], a[3])
new_pace[(a[2],a[3])]=name
except:
pace2[name].append((a[2], a[3]))
for name in pace2.keys():
key = pace2[name].copy()
se = {}
for i in key:
se[i[0]]=i
new = []
for i in se.keys():
new.append(se[i])
pace2[name]=new
# print(pace2)
pace3 = space(pace2)
# print('3',pace3)
pace4 ={}
for i in pace3.keys():
hang = i[0]
num = i[1]
if hang not in pace4.keys():
pace4[hang]=[num]
else:
pace4[hang].append(num)
# print(pace4)
hang_sort = list(pace4.keys())
hang_sort.sort()
# print(hang_sort)
for i in hang_sort:
nums = pace4[i]
nums.sort()
# print(nums)
for j in nums:
print('%s,%s,%s'%(i,j,pace3[(i,j)]))