拼多多学霸提前批笔试

       一共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))

四、忘了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值