2019暑假实习腾讯提前批笔试-后台及综合卷

好,大概率凉了,就当入门了。首先我没想到居然是5道编程题。牛客网上的真题我只练了两套选择题,这就非常尴尬了……

没事,考前5分钟看见题型的时候,我就明白是时候展现真实的实力了(?不存在的某种东西也能展示吗)

来吧。趁热打铁回忆一波。

1

第一题忘了。草稿都找不到了。但是真的不难。用时15min,100%case通过率。(……万万没想到也是唯一一个100%)


2、

给出i的n对区间,对表达式为  i*(-1)^i  的数列求和。1<=i<=10000000。

输入示例:

3

2 5

1 4

2 2

输出示例:

-2

2

4

分析

这个数列写出来就知道:

-1,2,-3,4,-5

非常明显的规律,而且区间也是连续的。我写了几个if,讨论左端点和右端点的奇偶情况,然后分别给出了计算数列和的表达式。最后结果是对了,但是60%case通过率,说我计算量太大,中间存在栈溢出什么的。


3、

小Q和妞妞在玩扑克牌,牌面是石头剪子布,用数字表示为 石头:0;剪刀:2;布:1。假设他们每人都抽取n张牌,然后每轮分别出一张牌,小Q胜了就+1分。最后小Q得分s,已知妞妞的n张牌,求小Q的牌有多少种排列方式。最后结果要模1e9+7。

输入示例:

3 2

0 1 2 

(第一行表示每人抽3张牌,小Q最后得2分)

(第二行表示妞妞抽到的牌,来自{0,1,2})

输出示例:

6

分析

这题写一下排列组合式子就知道需要求

然而结果的mod不会搞,后知后觉应该加在中间过程中,减少计算量。于是以40%case通过率告终……


4、

小Q去打枪。一共有n发子弹,目标是m种颜色的气球。小Q连续开n枪,问把每种颜色的气球都打一遍最少需要开几枪。

输入示例:

12 5

2 5 3 1 3 2 4 1 0 5 4 3

(第一行12表示连续开了12枪;5表示一共有5种颜色气球;第二行为12枪打中气球的颜色,0表示没有打中任何气球)

输出示例:

6

分析

即在题目给出的数组中,取一个长度最短、但是包含了所有数字的片段。

我的思路比较笨拙。直接去遍历每发子弹,然后用一个数组记录如果以它为开头,那么这个包含所有数字的片段最短是多长。在确定它的最短片段过程中,开了一个表示气球颜色的数组b[],记录每种颜色被打到的次数,然后每次循环一次后,去判断每种颜色有没有都被+1。如果都+1,就刚好结束循环,记录下这个数字。最后比较每发子弹的最短长度,取一个最短的。

总之就是用了很多循环,编译通过了,但结果不对。手动debug还是没发现错哪了。不过后来还剩10分钟的时候,发现这么做好像计算量冗余。其实后一发子弹的数组b[]和前一发是非常类似的,所以应该只要不断迭代下去,不需要循环。迷迷糊糊感觉是动规,可是列不出状态转移方程……应该是考虑这一发子弹加与不加进去的差别吧。


5、

输入n个数字,代表n栋楼,每栋楼都有自己的颜色,用数字表示。然后楼房按序排列成一排,从左往右高度依次增加。于是,从左边看过去,应该能看见很多种颜色。相邻两栋楼如果是同一种颜色,那么就是同一种颜色。现在要求能够看到L种颜色,求楼房的排列顺序有多少种。

结果还要模1e9+9(我现在知道这是10^9+9了……)

输入示例:

4 3

1 1 2 1

(4指一共四栋楼,3指要求看见3种颜色)

(第二行是4栋楼房各自的颜色,数字相同表示颜色相同)

输出示例:

12

(答案可能记错了……)

读了题觉得似乎要找使得数字不连续的数组,也不好做,时间也不够了。于是放弃挣扎了。

最后,我好菜啊……

好了,痛定思痛!

 

猜你喜欢

转载自blog.csdn.net/qq_41074047/article/details/88372016
今日推荐