潇洒郎: 去哪儿2021届/2020年开发岗笔试题分享

去哪儿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))

当时未来及的编写完,这是之后整的

运行效果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潇洒郎

您打赏我发自肺腑努力创作的心灵

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值