9.23去哪儿笔试

1. 刚哥的直播

时间限制: 3000MS
内存限制: 589824KB
题目描述:
2020年,直播已经成为去哪儿网酒店预售的新武器,去哪儿网CEO刚哥想从公司的m名员工中挑选n名参与自己的直播,已知m小于100请问一共有多少种选法。
输入描述

m(公司员工数)
n (挑选的员工数)

输出描述

p(挑选方法)

样例输入

4
2

样例输出

6

思路
本题为组合数求解问题。最终求解目标为 C m n C_m^n Cmn
代码实现

m = int(input())
n = int(input())
re,div = 1,1
for i in range(n):
    re*=m-i
    div*=(i+1)
print(re//div)

2. 一期需求-2021年校招用题

时间限制: 5000MS
内存限制: 589824KB
题目描述:
每周二是去哪儿网集体过需求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

思路
最长公共子序列问题,通过dp求解。
代码实现

N = int(input())
yy = input().split()
cp = input().split()
dp = [[0]*N for _ in range(N)]
for i in range(N):
    if yy[i]==cp[0]:
        dp[i][0]=dp[0][i]=1
    if cp[i]==yy[0]:
        dp[i][0]=dp[0][i]=1
for i in range(1,N):
    for j in range(1,N):
        if yy[i]==cp[j]:
            dp[i][j]=max(dp[i-1][j],dp[i][j-1])+1
        else:
            dp[i][j] = max(dp[i-1][j],dp[i][j-1])
print(dp[-1][-1])

3. 扑克牌的牌型分析-2021技术

时间限制: 3000MS
内存限制: 589824KB
题目描述:
德州扑克的花型由N 张扑克牌组成 0 < N < 8,可以组成的牌型按照价值从高到低来区分分别为:

扫描二维码关注公众号,回复: 11826140 查看本文章
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

思路
该问题需要考虑所有可能出现的情况,首先考虑所有的花色可能出现的情况;之后考虑数量所有的情况(四条、三条、葫芦…),最后考虑顺子的情况。
代码实现

N = int(input())
pocket = input().split()
from collections import defaultdict
huase = defaultdict(list)
pik = defaultdict(list)
for i in pocket:
    huase[i[0]].append(i[1:])
    pik[i[1:]].append(i[0])
re = ['HuangJiaTongHuaShun','TongHuaShun','SiTiao','HuLu','TongHua','ShunZi','SanTiao','LiangDui','YiDui','GaoPai']
res = [len(re)-1]
a = ['2','3','4','5','6','7','8','9','10','J','Q','K','A']
for t in 'SHCD':
    if len(huase[t])>=5:
        res.append(4)
        temp = [a.index(i) for i in huase[t]]
        if 12 in temp:
            temp.append(-1)
        temp.sort(reverse=True)
        for i in range(len(temp)-4):
            if temp[i]-4==temp[i+4]:
                if temp[i]==12:
                    res.append(0)
                else:
                    res.append(1)
for i in a:
    if len(pik[i])==4:
        res.append(2)
    if len(pik[i])==3:
        if 6 in res or 8 in res:
            res.append(3)
        res.append(6)
    if len(pik[i])==2:
        if 6 in res:
            res.append(3)
        if 8 in res:
            res.append(7)
        res.append(8)
t = [a.index(i) for i in pik if pik[i]!=[]]
if len(t)>=5:
    if 12 in t:
        t.append(-1)
    t.sort(reverse=True)
    for i in range(len(t)-4):
        if t[i]-4==t[i+4]:
            res.append(5)
print(re[min(res)])

猜你喜欢

转载自blog.csdn.net/jhaos/article/details/108766537