网易、雅虎、小米、人人、微策略、纳拓笔试题(回忆版)

来源:互联网 发布:剑灵人女捏脸详细数据 编辑:程序博客网 时间:2024/05/16 03:17

网易互联网笔试

1、计算斐波那契数列的值,要求复杂度小于O(n^2)

2、位运算计算两个数的和

3、图的深度优先搜索(非递归算法)

4、检测CPU大小端

int checkSystem(){union check{int i;char ch;}c;c.i = 1;return c.ch == 1;}

 

5、有一个很大的文本文件,读出其中的K行(K很小,K行可以放入内存),设计算法,要求每一行读取的概率相等,写出核心算法,复杂度,以及算法原理


yahoo软件开发中心笔试

1、fork()函数的用法

2、字符串中最长的回文

3、(i<j)&& (a[i]>a[j])的数对


小米笔试

1、一个数组中有三个数字出现一次,其他出现两次,打印出三个中的一个

2、n个人,m对关系,最多有几个朋友圈


人人笔试

1、不带头节点循环单链表去连续的重复元素

2、十个加油站,挑选其中一个给其他的送一车油,就最短距离

3、杨辉三角 优化算法

uint64_t f(int x,int y){if(x==0 || y == 0)return 2;return f(x-1,y)+f(x,y-1);}int main(){cout<<f(8,8);return 0;}


 

微策略笔试题

1、魔法数:

bool isMagic(int N, int B)  将N转成B进制的数,如果转化后的数字各种数字最多出现一次,返回true

2、节点代替。树中各个节点的值不等

type struct Node{

int mKey;

Node* mparent;

Node* mpLeftChild;

Node* mpRightChild;

};

void replaceNode(Node* rpRoot, int iKey, Node* ipNode)

将根rpRoot所指的树中mKey = iKey的节点找出来,用ipNode节点代替

3、斐波那契数组。

可以简化成这样:27级台阶,每次可以蹦1级或者2级,但是不能经过第5,8,13级,求多少种方法

4、int getIthNum(int n, int l, int i)

在一个集合里,有n位二进制的数,把所有的n位二进制数中1的个数超过l个的元素踢去,剩下的元素组成一个集合,求第i个元素

5、double型数组A[],升序排列,给定M,对于i<j, |M-A[i][j]|最小的值

6、对于n(3~9),任意插入+ 或者 - ,使式子结果为0

例如:n = 7; 1- 2 3 - 4 5 + 6 7 = 0

对于不同的n,求所有满足结果的式子

 

 

Atrenta中国研发中心(上海纳拓)

1、FIFO,最多四个元素,设计一个FIFO

2、f(1) = 2, f(2) = 7; f(n)=2*f(n-1)-f(n-2)

3、有序单链表

1)删除值在[n,m]之间的元素

2)merge两个单链表

4、计算表达式的值:

struct Exper{

 Code op;//+ - * / blank

 int value;

 Exper* arg0;

 Exper* arg1;

}

计算表达式的值,例如: 1+2-3*5/6


5、计算两条直线的交点

struct Point{

 int x;

 int y;

};

直线要基于点的结构

6、有一个0、1组成的字符串,按下面规则输出:

1)  前面是字符串长度,再就是'sh,再就是16进制数

2)  最高位是符号位,如果为1则在最前面加1

例如:011010--->6'sh1a


7、元素小于10000个元素的集合S={s1,s2,s3,s4,....,sn},每个元素是一个集合,长度小于1000,判断某个s是不是在S中

例如S={{1,2,3},{1,2},{2,3}},s={2,3,1},s在S中

 

 

腾讯笔试

1、哪一种RAID不可靠

2、Class A{

public:

    int m_a;

    A():m_a(0){}

}

class B : public A

{

public:

int m_a;

B():m_a(2){}

}

A *a = new B()

cout<<a->m_a<<endl;

输出的结果是什么?(0)

 

3、C++四种类型转化符号

reinterpret_cast  const_cast  static_cast  dynamic_cast

http://blog.sina.com.cn/s/blog_62b0a5e30100sxbs.html

 

4、腾讯游戏中玩的人最多的是QQ斗地主,有人说机器好就可以得到好牌,但是不是的,在服务器端,每次发牌前 服务器会洗牌,请设计一个洗牌算法 让牌能随机的打乱

#include<fstream>using namespace std;#include <ctime>int main(){int i,a[54],b[54],c[54];for (i =0;i<54;i++)a[i]=i+1;ofstream fout("Poker_num.txt",ios::out);int count=0;while (true){count++;for (i=0;i<54;i++)b[i]=a[i];for(i=0;i<54;i++)c[i]=i+1;for(i=53;i>=1;i--)swap(c[i], c[rand()%i]);for (i=0;i<54;i++)a[i] = b[c[i]-1];//cout<<count<<"\n";fout<<count<<"\n"; for (i=0;i<54;i++){ //cout<<a[i]<<" ";fout<<a[i]<<" ";} //cout<<"\n\n";fout<<"\n\n";}return 0;}



 科大讯飞

1、静态函数与普通类的成员函数区别

成员函数与静态函数的区别

    1、所有函数代码都在程序编译连接时放在一块,称为代码区,无论是静态还是非静态函数都一样,不存在 "构造一个类的对象(第一次构造对象)时,就会给成员函数(非静态成员函数)分配代码区空间 ",而是程序加载时,所有的代码已在内存空间存在.   只有函数中用到的局部变量才是函数调用时分配空间. 

    2、静态成员函数和成员函数之间根本的区别是:静态成员函数实际上是一个全局函数,不依赖一个类的对象.函数定义时之所以把静态成员函数定义在类中,是一种弱逻辑.     普通成员函数依赖一个类的对象,也就是它有this指针,必须指向一个类的对象.

    3、建立类的对象时只是给成员变量分配空间,析构时也只回收这些空间,代码段里的函数以及静态函数和变量都是在程序结束后回收。

 内联函数与普通函数的区别

       普通函数在编译的过程中由编译器将函数体放入代码段,在调用函数过程中先进行参数的压栈,然后根据函数的调用地址调用函数,并执行,函数返回后执行出栈操作,这样就会有一个调用的过程,会有时间的消耗。内联函数可以避免这样的消耗,一个函数申明为内联函数,在编译的过程中,编译器会将函数体代码插入函数调用处,这样虽然会增加代码段的空间,但是可以避免时间上的消耗,提高了效率。

 

2、“参数不同但是可以是相同的处理逻辑”

 

2、将一个字节逆序

#include <stdio.h>unsigned rev(unsigned X){ X=(X&0x55)<<1 | (X&0xAA)>>1;//ABCDEFGH → BADCFEHGX=(X&0x33)<<2 | (X&0xCC)>>2;//BADCFEHG → DCBAHGFEX=(X&0x0F)<<4 | (X&0xF0)>>4;//DCBAHGFE → HGFEDCBAreturn X; }int main(){int a;scanf("%x",&a);printf("%x",rev(a));return 0;}

 

3、一个类不可以继承,可以实例化,且仅能实例化有限次

在C++ 中没有final 这个关键字,要实现这个要求还是需要花费一些精力。

首先想到的是在C++ 中,子类的构造函数会自动调用父类的构造函数。同样,子类的析构函数也会自动调用父类的析构函数。要想一个类不能被继承,我们只要把它的构造函数和析构函数都定义为私有函数。

class FinalClass1{public:static int count ;//实例化次数public :      static FinalClass1* GetInstance()      {        if(count<=0)                return 0;            count--;            return new FinalClass1;      }      static void setCount(int n)      {          count  = n;       }      static void DeleteInstance( FinalClass1* pInstance)      {            delete pInstance;            pInstance = 0;      } private :      FinalClass1() {}      ~FinalClass1() {}};//////////////////////测试函数////////////////////////////////////////////////////////////#include<stdio.h>int FinalClass1::count=0; void main(){    FinalClass1::setCount(3);    FinalClass1 *f1 = FinalClass1::GetInstance();    FinalClass1 *f2 = FinalClass1::GetInstance();    FinalClass1 *f3 = FinalClass1::GetInstance();    if (f3==NULL)    printf("f3 NULL\n");    else    printf("f3 Not NULL\n");        FinalClass1 *f4 = FinalClass1::GetInstance();    if (f4==NULL)    {    printf("f4 NULL\n");    }    FinalClass1 *f5 = FinalClass1::GetInstance();    if (f5==NULL)    {    printf("f5 NULL\n");    }}

 

4、带空格的字符串,先输出字符串再输出字符

//注意:用gets接受输入的字符串void Output(char *str){char *p = str;int count=0;while (*str != '\0'){if (*str == ' ')count++;str++;}while (count--){printf(" ");}while (*p != '\0'){if (*p != ' ')printf("%c",*p);p++;}}


 百度笔试题

简答题:

1、列举几种常用的Hash算法,说明Hash算法的用途。

 http://blog.csdn.net/hupanfeng/article/details/6221944

http://yuhuafx.blog.hexun.com/58369610_d.html#

2、OSI模型有哪几层,HTTP协议工作在哪一层上

3、简述一个C语言程序运行所必须的东西和执行过程

 

算法题:

1、一车苹果,每3个装一袋剩2个,每5个装一袋剩3个,每7个装一袋剩2个,求满足此条件的N个解

void GetNResult(int N, int* A){int count=0;for (int i=1;count < N; i++){if ((21*i-1)%5 == 0)A[count++]=21*i+2;}}

 

2、用递归的算法,计算一个字符串中最长连续字符的问题。例如:aaabbccc→3,abbc→2

int getNum(char *str, int count, int& M){if (*str == '\0')return M;char temp = *str;if (*(++str) == '\0'){if (count>M)M = count;return M ;}if (*str == temp)count++;else{if (count>M)M = count;count = 1;}getNum(str,count, M);}


http://blog.csdn.net/arduousbonze/article/details/4293626

3、大树组问题。一个有序的超过100亿个元素的整型数组,将其分为若干段,每个段的元素个数少于20,将每个段内数据打乱,这样形成了一个新的数组,请将新数组排序,使用效率高的排序算法,分析算法复杂度。

设计题:

有关数据库的设计题。

 

大众点评笔试题目

1、给定一个正整数,输出分解质因数的表达式。例如,输入90,输出:90=2*3*3*5

int isPrime(int N){if (N == 1)return 0;if (N == 2 || N == 3)return 1;int m = sqrt(N);for (int i = 2; i <= m; i ++){if (! (N % i))return 0;}return 1;}int PrimeArray(int N, int *A){int i,j=0;for ( i=2; i < N; i++){if (isPrime(i))A[j++] = i;}return j;}void OutPut(int N){if (isPrime(N))printf("%d=%d\n",N,N);else{int m = N / 2;int *A;A = (int *)malloc(m*sizeof(int));int num = PrimeArray(N,A);printf("%d=",N);for (int i=0;i<num;){if (N % A[i] == 0){N = N / A[i];if (N == 1){printf("%d\n",A[i]);break;}elseprintf("%d*",A[i]);i = 0;}elsei++;}}}


 

2、计算一个树的深度,根的深度为1。函数原型为:

int TreeDepth(BinaryTree *pTreeNode);

struct BinaryTree{int data;BinaryTree* pLeftChild;BinaryTree* pRightChild;};int TreeDepth(BinaryTree *pTreeNode){int m,n;if (!pTreeNode)return 0;m = TreeDepth(pTreeNode->pLeftChild);n = TreeDepth(pTreeNode->pRightChild);return (m > n ? m : n) + 1;}

 

3、给定一个字符串,找出里面最长的连续不相同字符的个数。例如aadasddfasf,它的最长长度为:4,dfas。

 

原创粉丝点击