腾讯笔试题_20220424

article/2025/11/5 16:05:59

前言

笔试一共五道编程题,满分是100分,时间是两个小时,可以跳题,使用的平台是牛客网,允许跳出界面使用本地IDE。

题目一:构建数字

给定n个长度均为m的数字字符串,从上往下构建成m个新的数,去掉前置0后按照从小到大的顺序输出。

输入:

第一行包括一个整数n。

接下来n行每行包括一个长度为m的数字字符串。

输出:

第一行包括新构建的数按从小到大排列。

输入示例:

3

0121

1502

2138

输出示例:

12 128 151 203

思路

该题比较简单,可以直接暴力求解,需要注意的是前置0的处理。

n = int(input())
nums = []
for i in range(n):num = input()nums.append(num)ans = []
for i in range(len(nums[0])):a = ""for j in range(n):a += nums[j][i]# int()函数会直接去掉前置0ans.append(int(a))ans.sort()
for i in range(len(ans)):print(ans[i], end=" ")

题目二:淘汰数字

给定一个数组,下标从1~n,每次淘汰下标为非质数的数字,剩下的数形成新的数组,重复上述过程,直到数组内只剩下一个数字。

本题为核心代码模式,只需要补充解法类的实现代码即可。

输入:

第一行包括一个长度为n的数组。

输出:

第一行包括一个整数。

输入示例1:

[1, 2, 3, 4]

输出示例1:

3

输入示例2:

[3, 1 , 1 , 4 , 5, 6]

输出示例2:

5

思路

本题也是直接暴力求解,重点是求出n内的所有质数。

from math import sqrt, ceil
class Solution:def isP(self, x):m = ceil(sqrt(x))+1for j in range(2, m):if x%j == 0:return Falsereturn Truedef getNumber(self , a):# write code heren = len(a)pnums = [2]for i in range(3, n):if self.isP(i):pnums.append(i)while n != 1:k = 0for i in range(len(pnums)):if pnums[i] > n:breaka[k] = a[pnums[i]-1]k += 1n = kreturn a[0]a = [1,2,3,4] # [3,1,1,4,5,6]
print(Solution().getNumber(a))

题目三:士兵分配

给定一定数量的士兵,编号为1n,用长度为n的0/1串s表示,其中0代表该士兵只会进攻,1代表该士兵只会防御,且其攻击力或防御力等于其编号。将士兵分组,编号为1pos的士兵为进攻组,该组的攻击力之和用w表示,编号为pos+1~n的士兵为防御组,该组的防御力之和用v表示,求|w-v|的最小值。注意:pos可以取0,当pos取0时,表示将所有士兵分到防御组,而进攻组没有士兵。

输入:

第一行包括一个整数n,表示士兵的数量。

第二行包括一个0/1字符串s,表示士兵的状态。

输出:

第一行包括一个整数,表示|w-v|的最小值。

输入示例1:

4

0011

输出示例1:

1

输入示例2:

7

1000101

输出示例2:

2

思路

思路一:暴力求解。遍历整个字符串,在每一个位置对其进行分割,得到左右两个子串,然后分别统计左右两边的攻击力或防御力,与此同时不断刷新差值绝对值的最小值。这种方法的算法复杂度较高,无法AC。

思路二:逐个分配。可以先假设所有的士兵都在右边,左边没有士兵,即pos为0的情况,此时w和v均可知。然后遍历整个字符串,将士兵逐个从右边分配到左边,如果分配的士兵为0,那么w加上该士兵的编号,v不变;如果分配的士兵为1,那么v减去该士兵的编号,w不变,与此同时不断刷新差值绝对值的最小值即可。

以下为思路二的代码:

n = int(input())
s = input()
# 因为编号为1~n,且pos的取值范围为0~n
# 所以添加两个占位符可以简化问题的求解过程
s = "-" + s + "-"
w = 0
v = 0
for i in range(n+2):if s[i] == "1":v += i
res = v
for i in range(n+2):if s[i] == "0":w += iif s[i] == "1":v -= ires = min(res, abs(w-v))
print(res)

题目四:合并链表

给出一个链表数组,该链表数组均是某一个环状链表的一部分,请将这些链表组合并成环状链表,然后需要找到一个位置,使得从这个位置将环切开后,按照顺序或逆序遍历这个环,形成的链字典序尽量小,并返回这条链。

  • 链表字典序的定义:对于两个链表a、b,从头节点到尾节点遍历,找到第一个不相同的节点值并比较大小,如果a[i].val < b[i].val,则认为a的字典序小于b的字典序。例如:链表{1,2,3} < 链表{1,2,4}, 链表{3,4,5} < 链表{6,7}。

  • 环状链表不存在相同的节点值。

  • 该题环状链表节点个数最小为2

  • 每个链表都是在环状链表上的顺时针的一部分。

  • 给定的链表数组一定能组成一个环状链表。

输入示例1:

[{1, 2, 3}, {2, 3, 4}, {4, 1}]

输出示例1:

{1, 2, 3, 4}

输入示例2:

[{3, 7, 4}, {7, 4, 5, 1, 10, 3}]

输出示例2:

{1, 5, 4, 7, 3, 10}

思路

用字典存每个下标的前驱和后继,即可还原环状链表。接下来考虑切口位置,可将其转化为确定头节点和遍历方向的问题。要使字典序最小,那么头节点必须是链表里面的最小值(确定头节点),而下一节点为头节点的前驱节点和后继节点中较小的一个(确定遍历方向)。

本题的解法并不难,难的是如何处理输入,将其合并成一个环状链表。系统中采用的核心代码模式,只需补充解法类的实现代码即可,这里给出的是完整代码。

from re import compile
from xmlrpc.client import MAXINT
inp = input()
lss = compile('\d+').findall(inp)
ring = dict()
head = MAXINT
for i in range(len(lss)-1):ring[int(lss[i])] = int(lss[i+1])head = min(head, int(lss[i]))rering = {v : k for k, v in ring.items()}
pre = rering[head]
nex = ring[head]
res = '{' + str(head) + ','
if pre < nex:for i in range(len(rering)-1):res += str(rering[head]) + ','head = rering[head]
if pre > nex:for i in range(len(ring)-1):res += str(ring[head]) + ','head = ring[head]
print(res[:-1] + '}')

题目五:买卖股票

现在有一个长度为n的价格数组a,表示某只股票每天的价格。每天最多可以买入或卖出该只股票的一股,买入或者卖出没有手续费,且卖出股票前必须手里已经有股票才能卖出,但是持有的股票数目不受限制,并且初始资金为m元,在任何时刻都不能进行透支,即资金必须始终大于等于0。请问在n天结束之后,拥有的最大总资产是多少?其中总资产 = 股票数目 * 股票价格 + 现金。

输入:

第一行包括两个整数n和m,分别表示天数和初始资金。

第二行包括n个整数,分别表示该只股票每天的价格。

输入示例:

6 2

2 3 1 1 1 2

输出示例:

6

思路

动态规划,01背包的变种。定义dp[i][j]代表前i天,手上当前持有j只股票的最大现金数,那么可以根据每天选择买入还是卖出达成转移。

n, m = map(int, input().split())
prices = list(map(int, input().split()))
prices.insert(0, -1e16)
dp = [[-1e16 for i in range(n+2)] for j in range(n+2)]
dp[0][0] = m
for i in range(1, n+1):for j in range(n+1):# 今天不买不卖的情况nodo = dp[i-1][j]# 今天买入一股的情况buy = -1e16if j > 0 and dp[i-1][j-1] >= prices[i]:buy = dp[i-1][j-1]-prices[i]# 昨天卖出一股的情况sell = dp[i-1][j+1]+prices[i]# 取资金数目最大的一种dp[i][j] = max(nodo, buy, sell)res = -1e16
for i in range(n+1):res = max(res, dp[n][i] + i*prices[n])print(res)

凉梦空间

欢迎你进入我的个人博客网站参观交流:https://www.liangmeng.xyz
在这里插入图片描述


http://chatgpt.dhexx.cn/article/6Evyjb8g.shtml

相关文章

笔试面试(1)腾讯2014校园招聘软件开发类笔试试题

把基本经典的书籍认真看看,那些笔试面试的都不是什么问题。但是,专门的突击和训练还是很有必要的。 好的offer是可以通过充分的准备刷到的。 我们就从各大公司的套题开始刷起吧,中间再穿插一些专题。 今天先看看腾讯的2014年校招的软开笔试题。 考试时长:120分钟 一 不定项…

腾讯近三年软件测试工程师面试笔试题目精选(包含答案)

目录 1、什么是兼容性测试?兼容性测试侧重哪些方面? 2、我现在有个程序&#xff0c;发现在 Windows 上运行得很慢&#xff0c;怎么判别是程序存在问题 还是软硬件系统存在问题? 3、测试的策略有哪些? 4、正交表测试用例设计方法的特点是什么? 5、描述使用 bugzilla 缺…

Dev ChartControl 显示设置百分比

**Dev ChartControl 显示设置百分比**//Y轴设置成百分数显示((XYDiagram)Chart.Diagram).AxisY.Label.TextPattern "{V:0%}";//显示的值为百分数 for (int j 0; j < Chart.Series.Count; j){Series march Chart.Series[j];march.CrosshairLabel…

DevExpress——ChartControl知多少(C#)

目前在做的这个项目后端是使用.NET框架在做,前端是借助DevExpress框架做开发,由于是基于Winform的页面实现,于是DevExpress提供了全套的Winform的解决方案,弥补了Winform本身的工具箱不全且不再维护的弊端。DevExpress提供的表图控件叫做ChartControl,在其上面可以完成图表…

Dev中的ChartControl的Y轴显示单位

1.点击Y轴,打开属性 2.找到Title属性,设置其中的 Alignment(单位文本显示的位置) Font(文本字体大小) Text(文本内容) TextColor(文本颜色) Visibility(可见性) 设置完成后即可在图中看到设置效果

DEV控件之ChartControl用法 z

一、总体概述 这个控件包含3层&#xff0c;最外面的chartControl层、中间的XYDiagram层、最里面的Series层。功能非常强大&#xff0c;但同时使用起来也相对复杂&#xff0c;需要各个层之间相互协调设置才能达到自己想要的效果。 二、chartControl层 像DEV的其它控件一样&#…

ChartControl控件绘制柱状图

1、新建一个DevExpress窗体&#xff08;不要用WinForm窗体&#xff09; 2、拖入一个chartcontrol控件 3、鼠标右键&#xff0c;点击run designer 添加两个series 4、代码设置 数据库表结构&#xff0c;我的想法是统计办事员和售货员的人数 数据库查询语句 select job,co…

C# WPF图表控件之ChartControl用法指南①

“ 引言部分&#xff0c;总领全篇文章的中心内容。” WPF的DevExpress ChartControl是一种功能强大的可视化工具&#xff0c;可帮助您将数据显示为二维或伪三维条形图、区域、线和许多其他形式。 01 — 将数据绑定到Chart Series Step 1. 创建新项目并添加图表 创建一个新的WPF…

chartControl控件常用属性总结

chartControl可以绘制常见的柱状图&#xff0c;折线图&#xff0c;饼图&#xff0c;在windows form 窗体应用程序中可以很方便的使用。下面总结一下如何使用chartControl控件绘图&#xff0c;以及一些常用的属性。 1.添加series DevExpress.XtraCharts.Series _serTimechartCo…

在C#中使用DevExpress中的ChartControl实现极坐标图

在C#中使用DevExpress中的ChartControl实现极坐标图 背景实现思路参考代码 背景 在工控软件的开发中很多业务场景就是使用图表控件展示设备和工艺参数。如下图案例&#xff1a; 实现思路 通常简单的做法是使用图表控件实现&#xff0c;常用的图表控件有开源的ZedGraph&…

DevExpress ChartControl ToolTipPointPattern和ToolTipSeriesPattern

原本只是想改一下鼠标放到曲线上的tip显示的小数点位数 然后就发现他这个属性还挺多&#xff0c;多到有点看不懂 然后就写了小demo测试 demo代码 // Create a series and add points to it. Series series1 new Series("Series 1", ViewType.Line);series1.Points…

Dev中ChartControl添加限定线

1.单击Y轴,设置属性 2.点击ConstantLines属性,打开"Constant Line Collection Editor"界面 3.点击Add添加线条 4.通过设置Appearance中的Color属性,设置显示颜色; 设置Behavior中的AxisValue,设置线段出现的位置 设置Misc中的Name,设置显示文本

chartControl生成时间轴动态曲线

首先将dev的chartControl拖到窗体中并设置父窗体停靠&#xff0c;然后手动添加一个seriies,如下图 初始化chartxiao using DevExpress.XtraEditors; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing…

DevExpress ChartControl 折线图简单使用

c# DevExpress ChartControl 折线图简单使用 DevExpress ChartControl折线图简单使用 DevExpress ChartControl折线图简单使用 1、界面放一个panel控件 2、定义一个DataTable 存储数据 3、获取数据后放在DataTable DataTable 定义&#xff1a; DataTable res_data new DataTa…

DevExpress之ChartControl用法

DevExpress中的ChartControl顾名思义就是数据基于图表展示&#xff0c;其关键在于Series上的处理。 using System; using System.Drawing; using DevExpress.XtraCharts;namespace DevExpressUtilHelpV3 { public static class ChartToolV3 { /// <summary> /// 创建Seri…

ChartControl控件绘制折线图

新建DevExpress窗体 SQLServer数据库中的数据如下&#xff1a; 拖入XtraTabControl控件&#xff0c;并修改Text属性 分别拖入GridControl控件和ChartControl控件 在GridControl控件中点击Run Designer,添加三列数据并分别设置FieldName(与数据库中对应) 在chartcontrol控件中…

DevExpress chartControl 数据绑定

DevExpress chartControl 数据绑定 chartControl 数据绑定ChartControl直接绑定Series 绑定例程附件 chartControl 数据绑定 这里介绍两种绑定方式ChartControl直接绑定以及ChartControl里的series绑定 ChartControl直接绑定 通过chartControl的DataSource属性直接bingdings…

DevExpress ChartControl 实现多轴

先看成图 如果是您需要的效果&#xff0c;请往后看&#xff1a; //曲线 Color[] Colorlist new Color[7] { Color.FromArgb(255, 79, 129, 189), Color.FromArgb(255, 192, 80, 77), Color.FromArgb(255, 155, 187, 89), Color.FromArgb(255, 128, 100, 162), Col…

chartControl

关键代码&#xff1a; /// <summary>/// 设置X轴Title/// </summary>/// <param name"chart">ChartControl</param>/// <param name"titleText">Title文字</param> /// <param name"titleColor">Titl…