网易笔试题
1.写出对知之者不如好之者,好之者不如乐之者的理解。
答:了解他不如爱护它,爱护它不如与之为乐
2.用中文写出尽可能多的中文语句,要求包含有的意思(allboth之意),但不能有
答:皆、尽、全、咸、绝。。。。
3.new/deletemalloc/free的区别,并说说你在什么情况下会自另行建立自己的内存分配机制。
答:mallocfree不知道构造函数和析构函数
malloc/free:只要给出想要的内存的长度就分配,并返加(void*)
new/delete:分配内存同时进行类型检测,内置了sizeof运算,如果分配类的话,自动调用类的构造函数,delete也是,释放内存时调类的析构
4.为什么有必要写自己的operator newoperator delete
答:为了效率。缺省的operator newoperator delete具有非常好的通用性,它的这种灵活性也使得在某些特定的场合下,可以进一步改善它的性能。尤其在那些需要动态分配大量的
但很小的对象的应用程序里,情况更是如此。
有这样一个方法来实现你的自定义的operator new:先让缺省operator new分配一些大块的原始内存,每块的大小都足以容纳很多个airplane对象。
5.求极限limx-[x]),x趋于-3
答:左右极限不一样
从左是:1
从右是:-1
6.比较两个电路的可靠性。
7.编程题:输入一个正整数,若该数能用几个连续正整数之和表示,则输出所有可能的正整数序列。
答:维持一个FILO队列从1开始入队列并跟踪和sum,到x入队使得sum>=value的时候等于则记录队列,大于则队列弹出一个元素,然后x+1入队,sum小于value则继续入队,大于则出队,等于则记录然后入队复杂度应该是O(Value)的不知道你是不是这个意思?你好像没用队列而用两个变量代表第一个和最后一个元素吧这样更好!
void sum(int num)
{
    int first = 1;
    int end = 2;
    int sum = 0;
    for(int i = first; i <= end; i++)
      sum += i;
    while(first <= num)
    {
      if(sum < num)
      {
           end++;
           sum += end;
      }
      else if(sum > num)
      {
           sum -= first;
           first++;
      }
      else
      {
           for(int i = first; i <= end; i++)
              cout << i << " ";
           cout << endl;
           sum -= first;
           first++;         
      }
    }
8.有两个字符串 str1str2,写一个函数实现在str1中查str2的初始位置。要求不区分大小写。
9.在字符串S中寻最长的字符串x,条件是x存在于S中。即是如:abcabcdcd笔试题中的abc
答:不难用strncmp加二重循环搞定
第一重循环i = strlen(S)/2 to 1 (i代表比较字符串0的长度)
第二重循环j = 0 to strlen(S)-i-i (j代表比较字符串的起始位置)
然后循环体里strncmp(S+j,S+j+i,i);
第一个相等的字符串就是结果了。
void main()
{
         char      S[] = "1231234123455676456";

      for (int i=strlen(S)/2;i>0;i--)
              for (int j=0;j<strlen(S)-i-i;j++)
                     if (strncmp(S+j,S+i+j,i) == 0)
                     {
                            S[j+i] = 0;
                            printf("%s",S+j);
                            return ;
                     }
}
10.Fibonacci数列中第k个与前面所有数互质的数(除前面两个数 11 )。
long Fibo1(int n)
{
      long n1=1,n2=1;
      for(int i=3; i<=n; i++)
      {
              int temp=n2;
              n2=n1+n2;
              n1=temp;
      }
      return n2;     
}
bool IsPrime(int m)
{
      int t=sqrt(m);
      if (m == 1)
              return false;
      for (int i=2; i<=t; i++)
      {
              if(m%i == 0)
                     break;
      }
      if (i == t+1)
              return true;
      else
              return false;
}
bool IscoP(long a,long b)//辗转相除法判断两数互质,最大公约数为1
{
      while(b > 0)
      {
              int temp=b;
              b=a%b;
              a=temp;
      }
      if(a == 1)
              return true;
      else
              return false;
      //return a;
}
long FindK(int k)
{
      int count = 0;
      for (int i=3; ; i++)
      {
              for (int j=3; j<i; j++)
              {
                     if(!IscoP( Fibo1(i),Fibo1(j) ))break;
              }
              if(j == i)count++;
              if(count == k)
              {
                     return Fibo1(i);
                     break;
              }
      }
}
11.100个真币和一个,只知道真币与不等重,要求只称两次,得出是真币重还是重。101个钱币中,任取一个,其余100个分为2份,如果重量相同,取出的必定,与任何一个真币比较即可。如果重量不等,把重的50枚分为两分,如果不等,则重,否则轻。把轻的50枚分开称也可以得到结果
12.证明题:给出n个互不相同的分数数列a1/b1, a2/b2… an/bn ,证明(a1 + a2 + … + an) / (b1 + b2 + … + bn) 的值在数列a1/b1, a2/b2… an/bn 数列的最大值和最小值之间。
13. 证明题:在三角形中,假设等角对等边,证明大角对大边。
14. 文学题:在以下的空白中填入相应的词(蔼、断、淡、泰)并解释其含义。
答:自处超然,处事  然,无事澄言,处事  言,得意  然,失意  然。 淡、泰、蔼、断
15. 问答题:为什么现在的计算机采用二进制?而不是八进制或十六进制?你认为以后的计算机会采用几进制?
答:前技术水平而言,电位高低区分01逻辑比较简单高效,因而采用2进制。特别是采用刷新机制的大容量集成门电路,在两次刷新之间,电位不断降低,因此通过将电位分级来进行多进制计算就目前而言不可能。除非计算机的硬件技术有质的飞跃。
16.程序设计题:给出若干个单词,组成字典,要求查速度最快。
答:使用小写字母a-z组成单词,1表示a,一直到26表示z.使用幂乘法表示字母,比如aba*26+b,然后用幂乘法算出来的数字对数组大小的两倍值取余得到哈希值.用字母组合aa表示被删除的单词.
17.b1/a1,b2/a2,....,bn/an n个分数,分母同号,证明:(b1+b2+...+bn/(a1+a2+...+an)的值在上面n个分数值最大制和最小值之间.
18.证明:三角形中大边对大角,已知等边对等角
19.为什么计算机中多用二进制,16进制也用在程序中.你认为有没有可能回出现多进制的计算机,为什么?
20.一个没有拷贝构造函数和重载=运算符的String类,会出现什么问题,如何解决?
答:按位拷贝
21.编程题.
有篇文章,出文章中单词在词典中的序号,要求高效率.词典没排序.
22.有一位警长,抓了三个逃犯。现警长决定给他们一次机会。他拿出3顶黑帽子,两顶白帽子,然后往这三个逃犯头上每人戴了一顶帽子,每个逃犯只能看到另外两个逃犯帽子的
颜,不能看到自己帽子的颜,而且不能进行通讯,不能进行讨论,只能靠自己的推理推出来,如果猜出来了,放一条生路,否则处死。警长先问第一逃犯,结果第一逃犯猜错了,被杀掉了。警长问第二个逃犯,结果还是猜错了,同样被杀掉了。警长再问第三个逃犯,结果第三个逃犯猜对了。说明一下,每个逃犯在回答问题时,其他逃犯是听不到的。为什么第三个一定能猜中,请你给出解释。
答:如果A看到另外两个人都带白帽子,那么自己肯定带黑帽子。如果A看到另外两个帽子一白一黑,而黑帽子的那个人死了(一白一黑都死了),那么自己肯定不是白帽子,而是黑帽子。如果A看到另外两个帽子都是黑的,而第二个黑帽子也死了(如果A带白帽子,那么地一个黑帽子死了,第二个黑帽子应该知道自己帽子的颜),那么A肯定不是带白帽子,而是带黑帽子。
23.给出一个字符串,求一个子串x,令w=xx,表示x的连接,如x=abw=ababw在给出的字符串中出现并x是最长的。如给出"ababc"则结果是ab。并给出算法的时间复杂度。
24.Fabonacci数列定义为(1,1,2,3,5,8,.....),即每个元素是前两个元素的和。如果一个Fabonacci数与所有小于它的Fabonacci数互质,那么称之为Fabonacci质数。现在求第kFabonacci质数是第几个Fabonacci数。
25.101个硬币,其中有一个假的,已知重量与真币不同,且真币重量都一样,如何通过无砝码的天平称量两次,知道到底是重了还是轻了。
1.给定一个字串X,求它最长字串S,使得S=SRSRS的反序,即如果S=abc,则
SR=cba例子:X=abccba,则输出S=abc

2.对于Fib(忘了全拼)数列,如果Fib中于它之前的Fib数列均互质,则称为Fib质数
。对于第一个Fib质数为2,第二个为3,第三个为5。。。(Fib数列为,1,1,2,3,5,...)
输入一个数K,则第KFib质数所对应的Fib序数是多少?
如第一个Fib质数为2,对应Fib序数为3

3.36匹马赛跑,跑道同时只能容许6匹马。而且36匹马速度不同,但是每次跑的速
度恒定。问,跑多少次可以选出第一,第二,第三名
答:8   
366      6   
6组的第一名比赛     1   
6组中第一名比赛的到的名次中,用其第一名所在队伍的马2,马3,第二名所在队伍的马1,马2,第3名所在队伍的马1