20200415阿里笔试 Python3

第一题

题目描述

n个人,每个人有一个特征值a,给n个人安排座位,最大化邻座两个人之间的特征值差异程度之和。
输入:
第一行一个正整数n,带表总人数
第二行包含n个正整数,第i个正整数ai表示第i个人的特征值
注意:邻座的定义是第i人(1<i<n)的邻座是i-1,i+1; 第1人的邻座是2,n; 第n人的邻座是1,n-1。邻座i,j差异值是|ai-aj|,取绝对值。每对邻座差异值只算一次。
输出
第一行:最大差异值
第二行:输出用空格隔开的n个数,满足差异值最大化,重新排列过的特征值。(如果有多组,输出一组即可)

示例输入

4
3 6 2 9

示例输出

20
2 9 3 6

题解:

排序后按以下顺序排列:
最小,最大,次小,次大,再小,再大····································

Python3 代码

# 20200415 阿里笔试第一题AC

# n = int(input())
# list1 = list(map(int, input().split()))
n = 4
list1 = list(map(int, '3 6 2 9'.split()))
list1.sort()
#print(list1)

list2 = []
for i in range(n//2):
    list2.append(list1[i])
    list2.append(list1[-1-i])
if n & 1:                 # 若长度为奇数,list2补上list1中间的数
    list2.append(list1[n//2])
res = abs(list2[0] - list2[-1])
for i in range(n - 1):
    res += abs(list2[i] - list2[i+1])
print(res)
# print(list2)
print(' '.join(list(map(str, list2))))

第二题

题目描述

n个员工,每个员工都有个推理能力值Ai和阅读能力值Bi。要选两个员工i和j去竞赛,他们的平均推理能力是x=(Ai+Aj)/2, 平均推理能力是y=(Bi+Bj)/2。目标是从n个员工中选择两个人,使得min(x,y)尽可能大。请问最大值是多少。
输入:
第一行:正整数n
后面n行对应第i位员工的Ai和Bi。
输出:
一行 一个一位小数表示最大值

示例输入

3
2 2
3 1
1 3

示例输出

2.0

题解:

暴力通过30%

Python3 代码

n = int(input())
list1 = [[0] * 2 for i in range(n)]
for i in range(n):
    list1[i][0], list1[i][1] = list(map(int, input().split()))
# print(list1)
res = 0.0
for i in range(n - 1):
    if max(list1[i]) < res: continue
    if sum(list1[i]) < res * 2: continue
    for j in range(i + 1, n):
        if max(list1[j]) < res: continue
        if sum(list1[j]) < res * 2: continue
        res = max(res, min((list1[i][0] + list1[j][0]) / 2, (list1[i][1] + list1[j][1]) / 2))
print(round(res, 1))
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值