笔经分享 | 中国银行编程能力测评4.9

投票
 中国银行编程能力测评分享

中行编程能力测评使用的是牛客平台,严格双机位拍摄模式,120min 4 道编程题(19:00 - 21:00),编程语言不限,提交代码为 LeetCode 模式~

⭐ 题目大概如下 ⬇️
(个人答案仅供参考,欢迎提出其他解法~

1. 开发网站时,对于密码有一些规则: 
   1. 密码长度至少为 10
   2. 只能包含大小写字母 和 数字
   3. 至少出现 大写字母、小写字母、数字 这3种类型里的 2 种
给定一个密码 mypassword,判断密码是否符合规则?符合返回 true,否则返回 false。

2. 小王有一个银行卡密码(存在字符串中),只包含数字和大写字母,现知道密码的规则如下:
   1. 必须是一串连续的数字
   2. 如果数字之间有”BAC“字符串的话,可以消除掉
   3. 数字可能会很大
现需要从字符串中找到密码,找到的话输出符合规则的最大的数,如果字符串中没有数字的话返回 -1。

3. 在数据库中,为了方便存储 ip 地址,一般会把 ip 地址转化为一个十进制数字进行存储。
现需要把一个十进制的数字变回为 ip 地址的形式,规则如下:
   1. 首先把十进制的数字变成十六进制
   2. 每 2 位十六进制为一段,将其变成十进制,再加上点'.',填入到 ip 结果中。
现对于一个数字,需要输出其对应的 ip 地址字符串。如果 ip 地址非法,则输出 “invalid”。

4. 假设有很多不同面额的货币,每个货币只可以使用1次,但可以用不同面额的货币加在一起来购买大面额的商品,但是不想找零,因此对于一些金额的商品,无法进行购买。
比如有 1、2、5 元的货币,我可以购买 3 元的商品(1 + 2),但是由于 5 元无法找零,因此无法购买 4 元的商品。
现给定一个长度为 n 的正整数数组 money,分别表示 n 个货币的金额,求出无法购买的商品最小价格。

#中国银行笔试# #银行科技岗# #信息科技# #编程能力测评# #笔经# #中国银行# #银行校招# #中行笔试# #中行#

全部评论
请问需要手动处理输入输出吗?
点赞 回复 分享
发布于 2024-11-12 16:58 河南
tql佬
点赞 回复 分享
发布于 2024-05-08 00:13 陕西
你好,可以本地ide吗
点赞 回复 分享
发布于 2024-04-18 16:09 江苏
校友投的西安这边的部门嘛
点赞 回复 分享
发布于 2024-04-17 21:33 陕西
你好 请问可以选择哪些语言答题呢
点赞 回复 分享
发布于 2024-04-16 23:54 山西
话说第四道题贪心能a,是不是因为有个前置条件,即遇到不能凑的第一个面额就返回。
点赞 回复 分享
发布于 2024-04-09 21:56 北京
老哥A了几道
点赞 回复 分享
发布于 2024-04-09 21:22 陕西

相关推荐

专门在牛客上记录让自己破防的笔试题跪求路过大佬教教第三题做法## 编程题### 第一题输入n,然后输入一个长度为n的字符串s,接下来对于s的每一个前缀,将其依次反转然后拼接在一起,得到新的字符串s'输入m,接下来m次查询,要求输出s'的第m个字符(保证1 <= m <= (n + 1) * n / 2)**数据范围** n,m在1e5 对于所在的块写了一个二分,花了10min过的debug过程:第一次写的时候注意到了(n + 1)*n溢出风险,所以用的long long,但是x一开始用int存的将x从int换为long long之后,20%->100%### 第二题输入T,接下来T组数据每组数据:输入n,然后输入n个数,组成数组a。定义:对于一个长度至少为3的子序列,称其为V图,当x_1>x2>x3>...>xj且xj<xj+1<xj+2<...<xk 输出当前数组所有V图中,极差最大的那个的极差。**数据范围** T在1e3, n在1e5考虑每一个小标为j时对于答案的贡献,统计其左边和右边最大的数字,如果都大于a[j],则统计当前对答案的贡献左边右边最大的数字用dp,两边线性扫描。花了15分钟过的### 第三题输入n以及正整数集合S = {s1, s2, ..., sn} 输入m,之后m次询问,每次一个x。判断S中有无这样的一个子集T,s.t.对于任意在[1, x]范围的正整数y,都存在T的一个子集T',使得T'的元素之和等于y。如果存在,则输出所有满足上述条件的T中,元素个数最少的那一个;如果不存在,则输出-1。**数据范围** n,m小于1e5,x小于1e9。**样例** S = {1, 2, 4, 8, 16} 查询 7 8 32的期望结果分别为3 4 -1**当时做出的解题尝试以及思路回忆**:拿到题目觉得莫名像是最小线性筛,但是玩了一下样例之后发现不是这样的。没思路,先考虑简单一点的问题,“对于给定的子集T,验证其是否能覆盖1到x的所有数字”想法:对于T排序之后直接dp即可,不过x的范围是1e9,dp存不下,所以自顶向下记忆化搜索。好,思维没闲着,不过对于上面这个,子集T有2^2种可能,无法枚举,那如何做呢?基于上面做法,我们试试看贪心。对于查询x,每次选择S中≤x且最接近(x+1)/2的数num,将问题递归转化为解决1...max(num-1, x-num)。实现的话使用multiset和lower_bound进行二分查找,如果两边差值一样,优先使用较大的数字,否则选更靠近的那个#牛客AI配图神器#想了半天想到这个之后开始实现,实现完之后发现过不了样例,即 反例:S={1,2,4,8,32}, x=8时:我的贪心则会x=8第一次贪心选4,此时x=4;第二次贪2,此时x=2;第三次贪1,此时x=1。x大于0就会继续进while循环体,此时multiset找lowerbound的时候,较大的那一端选到的数字是8,大于x不予考虑,较小那一段没得数字了。即较大较小两端都没有可以选的数字了,break出while并输出-1无法继续选择导致失败,但正确解应为8,4,2,1**赛后反思**首先,其实可以写一个枚举然后验证的,这样如果有n < 30的数据点,至少可以拿一些部分分然后反思了我的贪心,应该自底向上贪心,初始cur=0,然后把S的所有元素全部插入到某一个数据结构中,由于选一个≤ cur+1的num可以让cur = cur + num,所以我们就贪心选数据结构中所有≤ cur+1元素中最大的那一个,更新cur,cnt,并从数据结构中删除被选择的数。如果cur大于等于查询x,返回cnr。如果数据结构中已经没有≤ cur+1的数可以选就break输出-1数据结构选择multiset的时候,时间复杂度为mnlogn,还是超时,不过正确性来说,应该是对的,可以大概想象到贪心正确性证明长啥样。TODO 正确性证明;考虑使用什么算法可以不超时。
投递淘天集团等公司10个岗位
点赞 评论 收藏
分享
评论
24
127
分享

创作者周榜

更多
牛客网
牛客企业服务