前言序锦:
没有过多的想法,只是抱着试一试的心态去做的,因为俺们可是一只考研猿,所以现在没有过多的准备面经之类的东西,更可气的是自己竟然连时间也差点错过了,留给我的时间就只有短短37分钟!不过还是硬着头皮去做了,毕竟有这么一次机会再怎么不能放弃!
正文:
招聘公司:腾讯
招聘岗位:技术研发类
招聘时间:2018年4月5号下午15:00-17:00
招聘地点:随意,只要自备一台能上网的电脑即可
招聘方式:在线笔试
- 题型简单分析:
刚开始自己也没有认真想好要报什么职位,因为自己学的就是计算机,也就没有多想,直接投了一个技术研发类的。可曾想过,一上场差点把自己吓尿了,什么类的题型都有:(选择题20道:60分;编程题3道:60分)
1, 最基本的,C、C++;
2,然后是数据库:主要是MySQL语言;
3, 接下来是数据结构:队列,堆栈、平衡二叉树、排序算法……,一抹子都上了;
4,当然,还有计算机网络:TCP协议,UDP协议,数据报文、IP地址……也都争相斗艳来了……
5,后面的编程题,说实话,我知道我没有多少时间去做了,但还是都看了一遍,至少要把题型看会嘛:
首先有两个例题:永恒的a+b;另外一个就是求回文字符串的以及和;
接下来就是三道编程题了:
1,第一道我清晰的记得是:求一个翻转数列,并求和;(后面会仔细介绍一下,看你们能不能在那么短短的五分钟之内想出来,哈哈,我太笨,不要笑话)
2,第二道是:求一个一个0-1背包问题,阔时大二学的算法差不多都快忘完了,所以这道题没有纳入范畴;
3,第三道题是:求一个回文字符串的hash编码,直接略过了,^-^ - 编程第一题解析:
题目:
给定整数n和m,满足n能被2m整除。对于一串连续递增的整数束流1,2,3,4……,每隔m个符号翻转一次,
最初符号为‘-’。
例如n=8,m=2数列就是:-1,-2,+3,+4,-5,-6,+7,+8。
而n=4,m=1,数列就是-1,+2,-3,+4。
小Q现在希望你能帮他算算前n项和为多少。
输入描述:
输入包括两个整数n和m(2=<n<=10的9次方,1<=m),并且满足n能被2m整除。
输出描述:
输出一个整数,表示前n项和。
示例:
输入:
8 2
输出:
8
刚开始看到这个题,我想应该没多难,就直接没有分析,直接上代码了,结果过了测试,然后没有通过所有测试,然后又修改了好几次,结果都是一样,哎,心伤了,这么简单一道题,我竟然最后没有全部做对,很方!!:
认真分析:
下来后,并没有打击到小编,而是认真研究了一下这道题,毕竟自己也是随便做一做,不过说实话,确实小编菜,进步空间还很大!
分析:
1,首先,我们看它说的是一个翻转数列,其实我们刚开始要是能很顺利的得到这个翻转数列,那一切也就OK了!求和也就是自然而然的事儿了!
2,其实做这种题,我们不要慌,也不要太轻视,最简单也最有效的一个方法:“实例化”,就是先通过几个简单的例子来进行测试一下,然后再进行推广!
3,然后我们来看一下输入的两个参数,n和m,其实n就是数列的长度,m就是翻转的周期,然后在满足n能被2m整除,基本就OK了
4,然后小编直接码代码了,这道题相对来说不是很难,多想一下就出来了,如果大家有更好的想法,可以将你们的代码留言到下面,供我们一起参考学习:
C++代码:
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
//freopen("1.in","r",stdin);
int n, m, h;
int con = 0;
int flag = -1;
int str[100];
cin >> n >> m;
h = m;
if ((n % (2*m)) == 0)
{
for (int i = 0; i < n; i ++)
{
str[i] = (i + 1)*flag;
h--;
if(h == 0){
flag *= -1;
h = m;
}
}
}
for(int k = 0 ; k < n ; k ++){
con += str[k];
}
cout<<con<<endl;
return 0;
}