去哪儿2021届/2020年开发岗笔试题分享
1、
2020年,直播已经成为去哪儿网酒店预售的新武器,
去哪儿网CEO刚哥想从公司的m名员工中挑选n名参与自己的直播,已知m小于100请问一共有多少种选法
输入描述
m(公司员工数)
n (挑选的员工数)
输出描述
p(挑选方法)
样例输入
4
2
样例输出
6
参考代码:
import sys
def jiechen(x):
if x==0:
return 1
elif x==1:
return 1
else:
return jiechen(x-1)*x
if __name__=="__main__":
while 1:
m=int(input())
n =int(input())
if 0<m<100 and 0<n<100:
if m >= n:
sys.stdout.write(str(int(jiechen(m) / (jiechen(n) * jiechen(m - n)))))
else:
sys.stdout.write(str(m)+'\n') #print(m)
else:
sys.stdout.write('\n')#print()
正确率:64%, 原因:未知,哪位坛友回复给完善一下
2、
每周二是去哪儿网集体过需求Final Review的时候,针对机票的报价排序,
运营总监小天和产品总监老冯产生了一些不同意见,
小天认为报价顺序应该是按照 a、f、d、e、z的顺序来做报价列表排序,
老冯认为应该按照f、a、e、d、z的顺序来做列表排序,两人争执不下,
技术总监这时站了出来,认为他们其实大多数意见是一致的,只有少数不一致,
可以先把意见一致的排序作为一期做上去,有争议的后续再来做,
那么如果一期本着把小天和老冯报价顺序意见一致的报价先做上去,
那么最多可以做上去多少个报价的排序。
输入描述
7(多少个报价)
a b c d e f g
b d a c f g e
输出描述
4(b d f g)
样例输入
7
a b c d e f g
b d a c f g e
样例输出
4
参考代码:
import sys
if __name__=="__main__":
while 1:
n=int(input())
sort1 = list(input().split())
sort11 = list(input().split())
if len(sort1)==n and len(sort11)==n:
nums = 0
while len(sort1):
s = sort1[0]
if s == sort11[0]:
nums += 1
sort1.remove(s)
sort11.remove(s)
sys.stdout.write(str(nums)+'\n')
else:
sys.stdout.write('\n')
正确率:64%, 原因:未知,哪位坛友回复给完善一下
3、
德州扑克的花型由N 张扑克牌组成 0 < N < 8,可以组成的牌型按照价值从高到低来区分分别为:
1.皇家同花顺:最高为Ace(一点)的同花顺。
如A K Q J 10 的同花顺
2.同花顺:同一花色,五张顺序的牌。
如:K Q J 10 9 的同花顺
3.四条:有四张同一点数的牌。
如:4 4 4 4 9
4.葫芦:三张同一点数的牌,加一对其他点数的牌。
如:3 3 3 10 10
5.同花:五张同一花色的牌。
如:J 10 8 7 5 的全是红桃的牌
6.顺子:五张顺连的牌。
如:5 4 3 2 A 的非同花牌(此牌型为最小的顺子)
7.三条:仅有三张同一点数的牌,其余两张点数不同。
如: 9 9 9 5 3
8:两对:两张相同点数的牌,加另外两张相同点数的牌。
如:K K 5 5 2
9.一对:仅有两张相同点数的牌。
如:10 10 9 4 2
10.高牌:不符合上面任何一种牌型的牌型,由单牌且不连续不同花的组成,以点数决定大小。
如:A 10 9 5 3 的非同花的牌
这十种牌型分别输出 HuangJiaTongHuaShun、TongHuaShun、SiTiao、HuLu、TongHua、ShunZi、SanTiao、
LiangDui、YiDui、GaoPai
扑克牌有4种花色,分别为 (S表示黑桃,H表示红心,C表示草花,D表示方片)
本题的输入为任意 小于 8 的 N张牌
得到的结果为这些牌中排序最靠前的类型。——不需要排序,已经排序
输入描述
2(牌数为2)
SA HA (两张牌为黑桃A 红心A)
输出描述
YiDui (结果为一对)
样例输入
5
SA SK SQ SJ S10
样例输出
HuangJiaTongHuaShun
10种牌例子:
SA SK SQ SJ S10 SK SQ SJ S10 S9 SJ S10 S8 S7 S5 S4 H4 C4 D4 D9 S3 H3 C3 S10 H10 S5 H4 S3 H2 SA S9 H9 C9 S5 S3 SK HK S5 H5 S2 S10 H10 S9 H4 H2 SA H10 S9 H5 C3
解题思路:先将牌型分类,注意:A K Q J 10 与5 4 3 2 A 如果要设置字典的话,必须先区分此两类
A_dict={"A":14,"K":13,"Q":12,"J":11,'10':10,"9":9,"8":8,"7":7,"6":6,"5":5,"4":4,"3":3,"2":2
lis为列表,为牌
lis_color为列表,为牌的花色
lis_value为列表,为牌的值
参考代码:
def judge_color(lis):
# 判断5张牌是否为同一花色
if len(lis)>=5: # 同花只有5张牌以及以上
for i in lis:
if lis.count(i) >= 5: # 同花只有5张以上颜色的牌
return True
return False # 没有5张以上颜色的牌
return False # 同花只有5张牌以及以上
def is_four(lis):
for i in lis:
if lis.count(i) == 4: # 判断四条
return True
return False
def is_Hulu(lis):
# 判断是否是葫芦
nums1 = 0
nums2 = 0
li=copy.deepcopy(lis)
for i in li:
if li.count(i) == 3: # 判断三条
nums1 += 1
if li.count(i) == 2: # 判断两条
nums2 += 1
li.remove(i)
if nums1 >= 2: # 两个三条即为
return True
if nums1 == 1 and nums2 == 1:
return True
return False
def is_san(lis):
# 判断是否是葫芦
for i in lis:
if lis.count(i) == 3: # 判断三条
return True
return False
def is_one(lis):
# 判断是否是一对
for i in lis:
if lis.count(i) == 2: # 判断一对
return True
return False
def is_double(lis):
# 判断是否是两对
nums=0
s=copy.deepcopy(lis) # 删除lis的内容也会删除外部的内容
for i in s:
if s.count(i) == 2: # 判断两对
ss=i
s.remove(ss)
s.remove(ss)
nums+=1
if nums>=2:
return True
else:
return False
def gnum(max_ele):
li=[]
for i in range(5): # lis 已从大到小排序好了
li.append(max_ele - i)
return li
def is_minsz(lis):
m=del_same(lis)
mm=[]
mm=mm+m[:1]+m[-4:]
if mm==[14 ,5 ,4 ,3 ,2]:
return True
return False
def judge_straight(lis):
# 判断是否为一般顺子,不是最小顺 lis已经排好序了
if len(lis)>=5: # 顺子只有5张牌以及以上
li=del_same(lis) # 去重
if li[0]>=5: # # 最大牌不能小于5,否则不会是顺子
for i in range(len(li)):
if (i+5)<=len(li):
if li[i:i+5]==gnum(li[i]):
return True # 存在连续5个的牌,则有顺子
return False
return False # 最大牌不能小于5,否则不是顺子
return False
def del_same(lis):
li=[]
for i in lis:
if i not in li:
li.append(i)
return li
def H(lists):
list_color = [i[0] for i in lists]
list_value = [A_dict[i[1]] for i in lists]
list_value.sort(key=int,reverse=True) # 从大到小排序
# 先分同花和非同花
if judge_color(list_color): # 同花
# 同花顺不顺: 分三种,同花顺包括皇家同花顺与普通同花顺,同花不顺;其中普通同花顺包括普通同花顺和同花最小顺[13 5 4 3 2]
if del_same(list_value)[:5]==[14,13,12,11,10]: # 皇家同花顺 SA SK SQ SJ S10
return 'HuangJiaTongHuaShun'
elif judge_straight(list_value) or is_minsz(list_value): #普通同花顺与特殊最小同花顺 #SK SQ SJ S10 S9 S5 S4 S3 S2 SA
return 'TongHuaShun'
else: # 不是顺子 SJ S10 S8 S7 S5
return 'TongHua'
else: # 非同花, 包括顺子(两种),不顺包括四条,葫芦(三条), 'SiTiao' 'HuLu' 'SanTiao' 'LiangDui' 'YiDui'
if judge_straight(list_value) or is_minsz(list_value):
return 'ShunZi'
else:
if is_four(list_value): # 判断四条
return 'SiTiao'
else:
if is_Hulu(list_value):
return 'HuLu'
else:
if is_san(list_value):
return 'SanTiao'
else:
if is_double(list_value):
return 'LiangDui'
else:
if is_one(list_value):
return 'YiDui'
else:
return 'GaoPai'
import sys,copy
"""
注意:
1、尽量不用if elif else 而是用if else (if else (if else)) 这样容易检查错误,虽然不是呢么整齐
2、对lis操作做删除操作时,即使在函数内部,也一定要深度复制一份,
"""
if __name__=="__main__":
while 1:
n=int(input())
sort1 = list([[i[0],i[1:]] for i in input().split()])
A_dict={"A":14,"K":13,"Q":12,"J":11,'10':10,"9":9,"8":8,"7":7,"6":6,"5":5,"4":4,"3":3,"2":2}
print(H(sort1))
当时未来及的编写完,这是之后整的
运行效果: