一共4道题。
一、
给两个列表,a中数字几乎严格升序。“几乎”的意思是,只需改变一个数字,就可使得a列表严格升序。问b列表中是否存在元素使得其替换了a列表的某元素后,a能严格升序。如果存在多个,则选最大的那个替换。不存在则输出NO
例:
input:
1 3 7 4 10
2 1 5 8 9
output:
1 3 7 9 10
#import sys
#for line in sys.stdin:
# a = line.split()
# inpt.append(a)
#print(inpt)
#a, b = inpt
a, b = [1,3,7,4,10], [2,1,5,8,9]
nc = -1
for i in range(1, len(a)):
if a[i] > a[i-1]:
continue
else:
nc = i-1
break
if nc == -1:
print('NO')
results = [[], []]
r1 = a[nc+1]
if nc == 0:
l1 = -9999
elif a[nc-1] < a[nc+1]-1:
l1 = a[nc-1]
else:
l1 = 9999
l2 = a[nc]
if nc +1 == len(a)-1:
r2 = 9999
elif a[nc] < a[nc+2]-1:
r2 = a[nc+2]
else:
r2 = -9999
for i in b:
if l1 < i and i < r1:
results[0].append(i)
if l2 < i and i < r2:
results[1].append(i)
if results == [[], []]:
print('NO')
elif results[0] != [] and results[1] != []:
if max(results[0]) > max(results[1]):
a[nc] = max(results[0])
elif max(results[0]) < max(results[1]):
a[nc+1] = max(results[1])
elif results[0] != []:
a[nc] = max(results[0])
else:
a[nc+1] = max(results[1])
for i in a:
print(i)
二、
判断输入的列表里的字符串能不能通过调换位置组成环形,使得前一个字符串的尾字母和后一个字符串的首字母相同。
思路,记录所有字符串的收尾字母,判断这些字母是否都重复了双数次,是就输出true,否就输出false。
例:
input:cat tdb
output:false
input:cat duf tbd fic
output:true
#import sys
#for line in sys.stdin:
# a = line.split()
#a = input().split(' ')
#a = ['cat', 'tdb']
list0 = []
for i in a:
list0.append(i[0])
list0.append(i[-1])
dic = {}
for i in list0:
if i in dic:
del dic[i]
else:
dic[i] = 0
if dic == {}:
print('True')
else:
print('False')
三、
有一堆长方形积木,高相等都是1,底为L×L,重量为W。每块积木只能承受自身7倍的重量,且上面一层的积木变成必须比下面一层严格小,问最多可以搭多少层。
例:
input:
10(积木数量)
1 2 3 4 5 6 7 8 9 10(积木底边长)
1 1 1 1 1 1 1 1 1 10(积木重量)
output:7(答案给的貌似是7,不记得了,可我自己怎么想都是8)
n = 10
l = [1,2,3,4,5,6,7,8,9,10]
w = [1,1,1,1,1,1,1,1,1,10]
num = [0] * n
suz = [0] * n
for i in range(1, n):
suz[i] = w[i-1] + suz[i-1]
num[i] = num[i-1] + 1
if suz[i] > 7 * w[i] or l[i] == l[i-1]:
suz[i] = suz[i-1]
num[i] = num[i-1]
print(max(num))
四、忘了