趋势科技笔试题1

时间:2021-08-12 14:55:40

趋势科技笔试题1

2008-08-19 22:21趋势的笔试题

 

1,你有5瓶药,每个药丸重10克,只有一瓶受到污染的药丸重量发生了变化,每个药丸重9克。给你一个天平,你怎样一次就能测出哪一瓶是受到污染的药呢? 1:2 :2

 

2. 十个苹果,有一个不同.或轻或重.称三次.

 

3,有4个女人要过一座桥。她们都站在桥的某一边,要让她们在17分钟内全部通过这座桥。这时是晚上。她们只有一个手电筒。最多只能让两个人同时过桥。不管是谁过桥,不管是一个人还是两个人,必要带着手电筒。手电筒必须要传来传去,不能扔过去。每个女人过桥的速度不同,两个人的速度必须以较慢的那个人的速度过桥。

第一个女人:过桥需要1分钟;

第二个女人:过桥需要2分钟;

第三个女人:过桥需要5分钟;

第四个女人:过桥需要10分钟。

===================================================

 

1. 答案解析:

 5个瓶子分别编号为1~5,然后1号瓶取一粒药丸,2号瓶去2粒药丸,以此类推,最后的重量和150相比,差几就是几号瓶。

2.答案解析:

4:4:2分别对应A:B;C

1) 先取4A个苹果,一边2A个放天平.结果有a和b两种:

a) 重量相同,另取4B个来称.结果有a1和b1两种:

a1) 如重量相同,留4B个其中的1B个,取剩余2C个中的1C个放天平另一边来称.如不同,那个1C就是了.如相同,C中的另一个就是了.

b1) 如重量不同,参照b方案.

b) 重量不同,取任意一边的2个若是B中的两个即2B,一边1个来称.结果有c和d两种:

c) 相同,则留其中一个1B,取剩余2个中的1个即1C放天平另一边来称.如不同,那个1C就是了.如相同,最后的那个1C就是了.

d) 不同,则留其中一个1B,从已称过的中取1个(若是1A)放天平另一边来称.如不同,那个1B就是了.如相同,B中另一个就是了.

答案3

1,2 go 2

1 back 1

5,10 go 10

2 back 2

1,2 go 2

趋势科技笔试题2

2008-04-18 17:59        以下的代码可放在VC++6.0里面运行。题目是要求输出:TrendMicroSoftUSCN然后要求修改程序,使程序能输出以上结果.

代码如下:

 

 

#include <iostream>

#include <string>

using namespace std;

int main(int argc,char * argv[])

{

   string strArr1[]={ "Trend ", "Micro ", "soft"};

   string *p=new string[2];

   p[0]= "US ";

   p[1]= "CN ";

   cout <<sizeof(strArr1) <<endl;

   cout <<sizeof(p) <<endl;

   cout <<sizeof(string) < <endl;

   for(int i=0;i <sizeof(strArr1)/sizeof(string);i++)

       cout <<strArr1[i];

   for(i=0;i <sizeof(p)/sizeof(string);i++) //sizeof(p)*8/sizeof(string)

       cout <<p[i];

   cout <<endl;

}

 

我在VC里面调过了,sizeof(strArr1)=48.

sizeof(string)=16.

sizeof(p)=4(指针变量)

 

我不明白的是为什么sizeof(string)=16,以及string 好象是在C#里面的,怎么用到C++里面了.

给出的答案是:for(i=0;i<sizeof(p)/sizeof(string);i++)

改为for(i=0;i<sizeof(p)*2/sizeof(string);i++)

 

我又调了下,应该是sizeof(p)*8(这才对的),

给位来帮我看看呢???

 

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

       首先要明确sizeof 不是函数,也不是一元运算符,他是个类似宏定义的特殊关键字,sizeof();括号内在编译过程中是不被编译的,而是被替代类型,如 int a=8;sizeof(a);在编译过程中,它不管a的值是什么,只是被替换成类型sizeof(int); 结果为4.如果sizeof(a=6);呢,也是一样的转换成a的类型,但是要注意 因为a=6是不被编译的,所以执行完sizeof(a=6);a的值还是6,是不变的!

 

记住以下几个结论:

1.unsigned影响的只是最高位bit的意义(正负),数据长度不会被改变的。所以sizeof(unsigned int) == sizeof(int);

2.自定义类型的sizeof取值等同于它的类型原形。如typedefshort WORD;sizeof(short) == sizeof(WORD)。

3.对函数使用sizeof,在编译阶段会被函数返回值的类型取代。如:int f1(){return 0;};

cout < <sizeof(f1()) < <endl;// f1()返回值为int,因此被认为是int

4.只要是指针,大小就是4。如:cout <<sizeof(string*) < <endl; // 4

5.数组的大小是各维数的乘积*数组元素的大小。如:chara[] = "abcdef ";

int b[20] = {3, 4};

char c[2][3] = { "aa ", "bb"};

cout < <sizeof(a) < <endl; // 7

cout < <sizeof(b) < <endl; //20*4

cout < <sizeof(c) < <endl; // 6

数组a的大小在定义时未指定,编译时给它分配的空间是按照初始化的值确定的,也就是7,包括‘\0’的。

6.字符串的sizeof和strlen,用例子说明:

char a[] = "abcdef ";

char b[20] = "abcdef ";

string s = "abcdef ";

cout < <strlen(a) < <endl; // 6,字符串长度

cout < <sizeof(a) < <endl; // 7,字符串容量

cout < <strlen(b) < <endl; // 6,字符串长度

cout < <sizeof(b) < <endl; //20,字符串容量

cout < <sizeof(s) < <endl; //16, 这里不代表字符串的长度,而是string类的大小

cout < <strlen(s) < <endl; // 错误!s不是一个字符指针。

a[1] = '\0 ';

cout < <strlen(a) < <endl; // 1

cout < <sizeof(a) < <endl; // 7,sizeof是恒定的

 

 

所以你的问题就解决的差不多了,sizeof(string)=16如yi-0220所说,

给出的答案是:for(i=0;i<sizeof(p)/sizeof(string);i++)

改为for(i=0;i<sizeof(p)*2/sizeof(string);i++) 答案也是不对的,sizeof(p)只是指针大小 为4, 要想求出数组p指向数组的成员个数,应该为sizeof(*p)*8/sizeof(string),为什么?

指针p指向数组,则*p就是指向数组中的成员了,成员的类型是什么,string型,ok那么sizeof(*p)为16,乘以2才是整个数组的大小

趋势科技笔试题3

2008-04-18

1、

#include<iostream>

class A{

public:

       A() {func(0);}

       virtual void func(int data) {printf("A1 :%d\n",data);}

       virtual void func(int data) const {printf("A2 :%d\n",data);}

       void func(char *str) {printf("A3 :(%s)\n",str);}

};

 

class B:public A{

public:

       void func()    {printf("B1:%s\n","");}

       void func(int data)   {printf("B2 :%d\n",data);}

       void func(char *str)   {printf("B3 :(%s)\n",str);}

};

 

int main()

{

       A *pA;

       B b;

       const A *pcA;

 

       pA=&b;

       pA->func(1);

       pA->func("test");

       A().func(1);

       pcA=&b;

       pcA->func(2);

       return 0;

}

 

程序运行的结果:

A1 :0

B2 :1

A3 :(test)

A1 :0

A1 :1

A2 :2

 

1) 基类的指针指向派生类对象:那么该指针只能够调用基类所定义的函数,但是如果该函数为虚函数,则调用该派生类自己的成员函数。(B2 :1)

2) 如果以派生类的指针指向基类对象,则必须事先做明显的转型操作,但是这种做法很危险。

 

2、

#include<iostream>

template

void func(const int &t)

{

        cout<<t+100<<endl;

}

 

template <typename T>

void func(const T&t)

{

        cout<<t;

}

int main()

{

        func(10.3);

        func(1000);

        return 0;

}

 

程序运行结果:

10.3

1000

 

如果上述函数改为

#include<iostream>

 

void func(const int &t)

{

        cout<<t+100<<endl;

}

 

template <typename T>

void func(const T&t)

{

        cout<<t<<endl;

}

 

int main()

{

        func(10.3);

        func(1000);

        return 0;

}

 

则程序的运行结果为:

10.3

1100

 

如果使用函数的非模板形式,不能在前面加上template关键字。

 

3、改错:

#include<iostream>

 

class klass

{

public:

   klass(){}

private:

   ~klass(){}

   void func(int n){cout<<"klass!!"<<endl;}

public:

   void test(){func(100);}

};

 

int main()

{

   klass k;

   k.test();

   return 0;

}

 

运行后程序显示:errorC2248: 'klass::~klass' : cannot access private member declared in class 'klass'

证明析构函数的属性必须为public。

 

但是,如果把klass k改为klass* pk; pk=new klass;pk->test();程序通过,但是klass不能释放.