6.6 Bussiness Object笔试记

10点多从小初得知BO有笔试,一看时间,只有2个小时赶到张江

到张江地铁,已经是1点10分了,出地铁看到最高的那栋楼,估计就是张江大厦了?!

进去,看楼层,只看到F21有BO的研发部。坐电梯上去,电梯上看到三个人也上21层,就问了句:你们也是来Bussiness Object笔试的吧?回答不是 *%#@%^

到21楼,发现他们打卡进去,才明白他们是内部员工。那个汗啊。。。

进去后,其中一人指我向那边一个房间,我以为在那里笔试,就进去,发现没人。过了会出来,遇到一位阿姨,她问我怎么进来的,我说我是来笔试的。她说在15楼,我下楼去。
电梯里,一位应该是HR的女子问我是交大的?我说是的,来笔试。然后一起下去,电梯上很尴尬。。。

到15楼,她进去,我顺便一起进去。在一个会议室门口,她让我进去,进去后才发现里面已经坐满交大同学了。。。

笔试开始、、、




一、选择题
关键词: distributed system      multiple thread        software testing

二、编程题
1. 搜索算法

改写原始的逐个搜索算法(时间复杂度为O(n)),让你的搜索算法时间复杂度达到O(log2n)

2. 字符串替换函数 补写
1 char *replace(char arr[], int arrsize, char search[], int ssize, char rep[], int rsize)
2 {
3 
4 
5 }



如果arr字符串中未找到search字串,返回arr
否则返回新字符串,其中search字串部分由rep串代替

 example:
arr :    a c o s e  u s a p l e s
search : u s a
rep: d e
返回: a c o e d e p l e s

我用BF字符串匹配算法实现:

 1 #include <iostream>
 2 using namespace std;
 3 
 4 
 5 char *replace(char arr[], int arrsize, char search[], int ssize, char rep[], int rsize)
 6 {
 7     if(arrsize < 0 || ssize < 0 || rsize < 0)
 8     {
 9         cerr << "Invailed index" << endl;
10         return NULL;
11     }
12 
13     int i = 0;
14     int j = 0;
15     int start = -1;
16 
17     //BF pattern string match algorithm
18     while( i < arrsize && j < ssize )
19         {
20             if(arr[i] == search[j])
21             {
22                 if(j == 0)
23                 {
24                     start = i; //record the 1st char of pattern
25                     cout << start << " " ;
26                 }
27                 i++;
28                 j++;
29             }
30             else
31             {
32                 j = 0;
33                 i = i - j + 1;//回到start下一位置并自加
34             }
35         }
36 
37 
38 
39     //start = j - i;
40     
41     if(j >= ssize)
42     {
43         cout << "ok, match succuss, the start index: " << start << endl;
44     }
45     else
46     {
47         return arr;
48     }
49 
50     //create array and copy elements    
51     char *retArr = new char[arrsize - ssize + rsize];
52     for(i = 0; i < start; i++)
53     {
54         retArr[i] = arr[i];
55     }
56 
57     for(i = 0; i < rsize; i++)
58     {
59         retArr[start + i] = rep[i];
60     }
61 
62     for(i = 0; i < arrsize - ssize - start; i++)
63     {
64         retArr[start + rsize + i] = arr[start + ssize + i];
65     }
66 
67     return retArr;
68 
69 }
70 
71 
72 int main()
73 {
74     char arr[12= {'a''c''u''s''e''u','s''a''p''l''e''s'};
75 
76     char search[3= {'u''s''a'};
77 
78     char rep[2= {'c''h'};
79     
80     char *retArr = replace(arr, 12, search, 3, rep, 2);
81 
82     int i;
83 
84     for(i = 0; i < 11; i++)
85     {
86         cout << retArr[i] << " ";
87     }
88 
89     return 0;
90 
91 }


3. 写三个类 Shape, Square, Circle,每个类中有成员函数area(),计算各自面积
    写一个函数计算一个Square或Circle数组的面积和sum

 1 #define PI  3.14159265
 2 class Shape
 3 {
 4 public:
 5 
 6 private:
 7 
 8 }
 9 
10 class Square : public Shape
11 {
12 public:
13 
14 private:
15 
16 }
17 
18 class Circle : public Shape
19 {
20 public:
21 
22 private:
23 
24 }
25 
26 double sum(Shape arr[], int size)
27 {
28 
29 }

我当时准备用多态实现,后来回去在VC6.0上怎么都不行。现改成函数模板实现如下:

 1 #include <iostream>
 2 #include <typeinfo>
 3 using namespace std;
 4 
 5 #define PI 3.14159265
 6 
 7 class Shape
 8 {
 9 public:
10     virtual double area() = 0;
11 
12 };
13 
14 class Square : public Shape
15 {
16 public:
17     Square() {}
18     Square(double val) : a(val) {}
19     virtual double area() { return a*a; }
20 private:
21     double a;
22 };
23 
24 class Circle : public Shape
25 {
26 public:
27     Circle() {}
28     Circle(double val) : r(r) {}
29     virtual double area() { return PI*r*r; }
30 private:
31     double r;
32 };
33 
34 template <typename T>
35 double foo(T arr[], int size)
36 {
37     double sum = 0;
38     for(int i = 0; i < size; i++)
39     {
40         //cout << typeid(arr[i]).name() << " ";
41         sum += arr[i].area();
42     }
43 
44     return sum;
45 }
46 
47 int main()
48 {
49     Square arr[3];
50     arr[0= Square(1);
51     arr[1= Square(2);
52     arr[2= Square(3);
53 
54     cout << foo(arr, 3<< endl;
55 
56     //Shape * s = new Square(3);
57     //cout << typeid(*s).name() << " " << s->area();
58     Circle arr1[3];
59     arr1[0= Circle(1);
60     arr1[1= Circle(2);
61     arr1[2= Circle(3);
62 
63     cout << foo(arr1, 3);
64 
65     return 0;
66 
67 }


 

posted @ 2007-06-06 20:08  中土  阅读(964)  评论(0)    收藏  举报
©2005-2008 Suprasoft Inc., All right reserved.