搜狗2012年校园招聘笔试题【转自网络】

时间:2021-03-16 18:49:49

1、下面代码中for循环共执行了多少次?

  1. unsigned short i,j;  
  2.     for(i=0, j=2; i!=j; i+=5, j+=7)  
  3.     {}  

unsigned short占用2个字节,当数据范围到头了(2^16-1),就又从0开始计数了,这个其实就是两辆汽车行驶在一个圆圈里的汽车追及问题。一个速度为5,一个速度为7,当速度为7的超越速度为5的时候,两个汽车就相遇了,2 + 7n - 5n = 2^16 所以共循环了32767次。

  1. unsigned short i,j;  
  2.     for(i=3,j=7;i!=j;i+=3,j+=7)  

这个也是一样的,7 + 7n - (3+3n) = 2^16

2、下面程序应该输出多少?

  1. char *c[] = { "ENTER""NEW""POINT""FIRST" };   
  2. char **cp[] = { c+3, c+2, c+1, c };   
  3. char ***cpp = cp;   
  4.   
  5. int main(void)  
  6. {   
  7.     printf("%s", **++cpp);   
  8.     printf("%s", *--*++cpp+3);   
  9.     printf("%s", *cpp[-2]+3);   
  10.     printf("%s\n", cpp[-1][-1]+1);   
  11.     return 0;  
  12. }  

3、已知程序代码如下:

  1. struct S  
  2. {  
  3.     void func1(S &);  
  4.     void func2(const S&);  
  5.     void func3(S&) const;  
  6.     void func4(const S&) const;  
  7. };  

下面哪些能正常执行()

A、makeS().func1(makeS())

B、makeS().func2(makeS())

C、makeS().func3(makeS())

D、makeS().func4(makeS())

4、下列代码的输出为多少?

  1. int main(void)  
  2. {  
  3.     enum {a, b=5, c, d=4, e};  
  4.     enum {h,x, y, z, v=120, w, r=99,s,t};  
  5.     return 0;  
  6. }  

a、c、e、h、x、y、z、w、s、t的值分别是多少?

在枚举类型中声明的第一个枚举成员它的默值为零。没有显示赋值的枚举成员的值,总是前一个枚举成员的值+1。
a:0          c:6            e:5

h:0          x:1           y:2            z:3           w:121               s:100                 t:101

5、一个长度为n的数组a[0],a[1],...,a[n-1]。现在更新数组的名个元素,即a[0]变为a[1]到a[n-1]的积
a[1]变为a[0]和a[2]到a[n-1]的积,...,a[n-1]为a[0]到a[n-2]的积。
程序要求:要求具有线性复杂度,不能使用除法运算符。

思路是思想跟这个一样,用两个数组b、c
b[i] = a[0] *... * a[i - 1],c[i] = a[i + 1] *...*a[n] ,时间复杂度为O(2n)
最后a[i] = b[i]*c[i],我在这里没用c数组,少用c【i】数组的话,程序写起来就不是太好理解,其实是一个道理。

  1. int main(void)  
  2. {  
  3.     int i, a[]={1,2,3,4};  
  4.     int temp, n=4;  
  5.     int *b = new int[n];  
  6.     b[0] = a[0];  
  7.   
  8.     for(i = 1; i < n-1; i++)  
  9.     {  
  10.         b[i]=b[i-1]*a[i];  
  11.     }  
  12.     b[n-1] = a[n-1];  
  13.     for(i = n-1; i >= 0; i--)  
  14.     {  
  15.         temp = a[i];  
  16.         if(i == n-1)  
  17.             a[i] = b[i-1];  
  18.         if(i>0 && i<n-1)  
  19.         {  
  20.             a[i] = b[i-1]*b[i+1];  
  21.             b[i] = temp*b[i+1];  
  22.         }  
  23.         if(i == 0)  
  24.             a[0] = b[1];  
  25.     }  
  26.   
  27.     //输出最后的a元素  
  28.     for(i = 0; i < n; i++)  
  29.     {  
  30.         printf("%d  ",a[i]);  
  31.     }  
  32.     return 0;  
  33. }