2022.08.30 携程秋招笔试题目

34 篇文章 0 订阅
1 篇文章 0 订阅

算法1

题目描述:给你一个正整数,重排这个正整数的数位,使得它变成偶数,不能有前导0

输入描述:第一行整数q, 接下来的q行,一行一个整数

思路:

这个就需要从后往前走了,在走到开通之前如果能遇到偶数,说明可以满足条件

关于前导0的问题,题目中说明了输入的是正整数,所以数字0出现的位置一定是整数中间,所以只要出现了就交换位置就可以了

代码:

    n = int(input())
    for _ in range(n):
        s = input()
        idx = -1
        for i in range(len(s) - 1, -1, -1):
            if int(ord(s[i])-ord('0')) % 2 == 0:
                idx = i
                break
        if idx == -1:
            print(-1)
        else:
            s = list(s)
            s[idx],s[-1] = s[-1],s[idx]
            print(''.join(s))

算法2

题目描述:有a个'y',b个'o',c个'u';用这些字母组成一个字符串,you获得2分,oo是1分。问最多可以获得多少分?

输入输出:第一行一个整数q,代表询问次数,接下来q行,每行三个正整数a,b,c,输出询问答案

思路:这个搞清楚a,b,c之间的关系就行了;首先计算可以组成you的数,那就是x=min(a,b,c)

之后 a-x,b-x,c-x  就看看还能拼成多少个oo啦,此时 o的个数是b-x  ooo就可以看成两个 oo也就是2分,所以最后得分 2*x + max(0,b-x-1)

代码:

    q = int(input())
    for _ in range(q):
        a, b, c = [int(x) for x in input().split(' ')]
        d = min(min(a, b), c)
        ans = d * 2
        b -= d
        ans += max(0, b - 1)
        print(ans)

算法3

题目:一棵树,染成了红(r)、绿(g)、蓝(b),删除一条边,使得剩下的两个连通块恰好有三种颜色,求合法的删除(树指的是不含重边和自环的无向连通图)

输入输出:第一行正整数n(节点数量)、第二行长度为n的字符串(仅包含rgb),第i个字符表示节点i的颜色,接下来的n-1行,是输入正整数u,v 代表节点u,v之间有一条边连接

思路:无向图;直接深搜;dfs(u,f)划分为两个区域,u和其儿子们放在一个区域计算,因为u和父亲断开,只是断一条边;如果和儿子们断开,可能断开多条边。

代码里有两个dfs 一个dfs用于统计每个节点子树下的rgb出现次数  一个dfs用于看看断开之后是否能满足条件。

def dfs(u, f):
    # ipdb.set_trace()
    num[u][mp[color[u]]] = 1
    print(str(u)+'_'+ str(f))
    for v in G[u]:
        if v != f:
            dfs(v, u)
            for j in range(3):
                num[u][j] += num[v][j]

def dfs2(u, f):
    global ans
    for v in G[u]:
        if v != f:
            dfs2(v, u)
            flag = True
            for j in range(3):
                if num[v][j] == 0 or num[0][j] == num[v][j]:
                    flag = False
            if flag:
                ans += 1
n = int(input())
color = input()
G = [[] for i in range(n)]
for i in range(n - 1):
    u, v = [int(x) - 1 for x in input().split()]
    G[u].append(v)
    G[v].append(u) # 存储和哪些节点进行相连
mp = {'r': 0, 'b': 1, 'g': 2}
num = [[0 for j in range(3)] for i in range(n)]
dfs(0, -1)
ans = 0
dfs2(0, -1)
print(ans)

问题4:

描述:平滑值指的是在数组中,任意两个相邻的数的差的绝对值的最大值 [1,2,5,7,8] 的平滑值是3

目前,修改一个位置的数字(改成任意值)或者不修改,数列的平滑值最小应该为多少

思路:分别统计pre shu 【从前往后、从后往前的差值】,然后再一次遍历,去比较改变当前元素的变化。具体看代码吧

n = int(input())
a = [int(x) for x in input().split()]
pre = [0] * n
suf = [0] * n
for i in range(1, n):
    pre[i] = max(pre[i - 1], abs(a[i] - a[i - 1]))
for i in range(n - 2, -1, -1):
    suf[i] = max(suf[i + 1], abs(a[i] - a[i + 1]))
ans = 200000000
for i in range(n):
    if i == 0 or i == n - 1:
        if i - 1 >= 0:
            ans = min(ans, pre[i - 1])
        if i + 1 < n:
            ans = min(ans, suf[i + 1])
    else:
        gap = int(math.ceil(abs(a[i - 1] - a[i + 1]) / 2))
        ans = min(ans, max(max(pre[i - 1], suf[i + 1]), gap))
print(ans)

笔试情况:算法1、2、4全A,算法3思路没错,猜测python的栈空间的问题,导致报错,通过75%

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
爬取携程网评论可以使用Python中的网络爬虫库,比如Requests和BeautifulSoup。下面是一种实现方式: 1. 首先,导入相关库: ```python import requests from bs4 import BeautifulSoup ``` 2. 使用Requests库发送请求,获取携程网某个酒店的评论页面: ```python url = "https://you.ctrip.com/hotels/某个酒店ID/reviews" headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"} response = requests.get(url, headers=headers) ``` 请将"某个酒店ID"替换为你想要爬取评论的酒店ID。 3. 使用BeautifulSoup库解析HTML页面,提取评论内容: ```python soup = BeautifulSoup(response.text, "html.parser") comments = soup.find_all("div", class_="comment_single") for comment in comments: content = comment.p.text.strip() print(content) ``` 通过查看网页源代码,可以确定评论内容所在的HTML标签和类名,并使用find_all方法进行提取。此处假设评论内容位于class为"comment_single"的div标签内,而实际情况可能有所不同,请根据实际情况进行调整。 4. 由于携程网的评论可能存在多页,可以使用循环进行多页爬取: ```python page = 1 while True: url = "https://you.ctrip.com/hotels/某个酒店ID/reviews/p" + str(page) response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, "html.parser") comments = soup.find_all("div", class_="comment_single") if not comments: break for comment in comments: content = comment.p.text.strip() print(content) page += 1 ``` 这段代码中使用了一个while循环,当发现评论为空时,跳出循环。循环每次请求的url通过拼接字符串的方式实现翻页。 以上就是Python爬取携程网评论的简单实现方法,可以根据实际需求进行扩展和改进。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值