2020京东测试岗暑期实习生4.18场编程题第一题
题目分选择30道(60)和编程两道(40)
1.题目
给定6个矩形的长和宽wi和hi(1<=w, hi <= 1000),判断它们能否构成长方体的六个面。
输入
2
1345 2584
2584 683
2584 1345
683 1345
683 1345
2584 683
1234 4567
1234 4567
4567 4321
4322 4567
4321 1234
4321 1234
输出
POSSIBLE
IMPOSSIBLE
2.思路如下:
其实只需要找到构成长方体的条件即可
长方体共有12条边,分别为长a、宽b、高c,均出现4次,这是最普通的长方体,还要考虑长宽高互相相等的情况,总之判断边出现的次数是否满足以下三种情况即可
(1)a≠b≠c 12条边中等价于三个数,均出现四次
(2)a,b,c中存在两者相等 比如a=b≠c 12条边等价于两个数,分别出现4次、8次
(2)a=b=c 三边相等,12条边相当于一个数出现12次
满足任一种情况即可,构成长方体
3.代码如下
import sys
n = int(input())
s = []
for line in sys.stdin:
tempstr = line.split()
s.extend(tempstr)
# 建立字典统计每条边出现次数
c = dict()
for i in b:
if i in c:
c[i]+=1
else:
c[i]=1
# 长宽高都不同 3个数字 出现次数为4 长宽高有两个相同 共有2个数字 出现次数为4,8 长宽高都相同
# 将出现次数存入数组 不需要考虑哪条边是长,哪条边是宽
num = []
for value in c.values():
num.append(value)
if (len(num)==1)or((len(num)==2)and max(num)==8)or((len(num)==3)and max(num)==4):
print ('POSSIBLE')
else:
print ('IMPOSSIBLE')
ps:读了题感觉不难结果就是做不对,状况百出,可能18号不宜做题
一开始我只考虑了长宽高不等这一种情况
其实不需要区分哪条边做长做宽做高,只需要确定这组数能否构成即可
思考 如果需要输出长宽高那程序要咋个改嘞