您的位置:首页 > 其它

趋势科技2011校招笔试题+答案解析

2012-08-13 11:47 369 查看
1、下面程序的输出是多少?

void GetMemory(char *p)

{

p = (char *)malloc(11);

}

int main(void)

{

  char *str = "Hello";

  GetMemory(str);

  strcpy(str,"Hello World");

  printf("%s",str);

  return 0;

}

A、Hello B、Hello World C、Hello Worl D、Run time error/Core dump

2、下面哪个会使这段程序编译错误?

class A

{

public:

A()

{

}

};

class B:public A

{

  10. public:

  11. B()

  12. {

  13. }

  14. };

  15. A *pb = new B();

  16. B b;

A、 A *pa = dynamic_cast<A *>(pb);

B、 A *pa = static_cast<A *>(pb);

C、 A a = static_cast<A >(b);

D、 A a = dynamic_cast<A >(b);

E、None of above

3、下面程序执行的结果是()

void main()

{

char s[] = "abcde";

s +=
2;

printf("%c\n",s[0]);

}

A、a B、b
C、c D、编译错误

4、下面程序执行的结果是()

int main(void)

{

char
matrix[3][3]={{'a','b','c'},{'d','e','f'},{'g','h','i'}};

printf("%c",matrix[1][4]);

return 0;

}

A、c B、f C、g D、h

二、算法题

1、如何用两个栈来实现一个队列,并分析有关队列操作的运行时间。

2、如何用两个队列实现一个栈,并分析有关栈操作的运行时间。

参考答案(欢迎讨论) 转载请注明来源 http://www.cnblogs.com/jerry19880126/

选择题:

D。GetMemory(str)并不会为str新分配空间,因为str和形参的p虽然指向相同,但它们自身的地址是不同的,p在执行malloc之后就指向不同的位置了,随后因为是局部变量而被释放(但malloc的空间没有析构,成为无法被引用的空间了)。str一直都是指向”Hello”的。str不是字符串数组(只是一个指向字符串常量首地址的指针),没有可用的连续空间,不能用strcpy。

D。用dynamic_cast进行转换时,待转换的类型只能是指针或引用(更详细的总结我会近期更新在博客里)。

D。数组的首地址是常量,不可以变更,若char* p = s. p是允许有p+=2的操作的。

D。数组是连续存储的,元素在空间是连续排布的。

算法题:

1.

队列的操作主要有:入队,出队,返回队列长度,返回队首元素,判断队列是否为空。若用两个stack实现,可以令其中一个inStack专门处理入队操作,另一个outStack专门处理出队操作。对于入队而言,可以直接把元素加入到inStack中,复杂度为O(1),出栈的时候需要做些处理,因为队列是先入后出的,而栈是先入先出,所以输出应该反序,比如inStack接收到的元素顺序为1, 2, 3,栈顶元素是3,但出队希望让1先出。解决方法是把inStack里的元素放到outStack中,这样outStack接收到的元素顺序就是3, 2, 1了,栈顶元素就是我们想要的1,时间复杂度为O(N)。更具体地,入队直接inStack.push(元素),出队先判断outStack是否为空,若不为空,则直接outStack.pop(),若为空,则把inStack元素导入到outStack里,再执行outStack.pop()。其他操作都比较简单,具体参考CPP程序,复制到visual studio中可以直接运行的。

用两个队列实现栈

#include <iostream>
#include <cassert>
#include <queue>

using namespace std;

template <class T>
class myStack
{
private:
queue<T> q[2];
int currentIndex;

public:
myStack():currentIndex(0){}
bool empty() const;
size_t size() const;
void push(const T& element);
void pop();
T top();
};

/************************************************************************/
/*
判断栈是否为空,算法复杂度为O(1)
*/
/************************************************************************/
template <class T>
bool myStack<T>::empty() const
{
return size() == 0;
}

/************************************************************************/
/*
返回栈的大小,算法复杂度为O(1)
*/
/************************************************************************/
template <class T>
size_t myStack<T>::size() const
{
return q[0].size() + q[1].size();
}

/************************************************************************/
/*
入栈操作,算法复杂度为O(1)
*/
/************************************************************************/
template <class T>
void myStack<T>::push(const T& element)
{
q[currentIndex].push(element); // 入队
}

/************************************************************************/
/*
出栈操作,算法复杂度为O(N)
*/
/************************************************************************/
template <class T>
void myStack<T>::pop()
{
assert(!empty()); // 若栈为空,则抛出异常
int nextIndex = (currentIndex + 1) % 2;
while(q[currentIndex].size() > 1)
{
// 从一个队列搬移到另一个队列
T element = q[currentIndex].front();
q[currentIndex].pop();
q[nextIndex].push(element);
}
// 最后一个元素弹出
q[currentIndex].pop();
currentIndex = nextIndex;
}

/************************************************************************/
/*
返回栈顶元素,算法复杂度为O(1)
*/
/************************************************************************/
template <class T>
T myStack<T>::top()
{
assert(!empty()); // 若栈为空,则抛出异常
int nextIndex = (currentIndex + 1) % 2;
T element;
while(q[currentIndex].size() > 0)
{
// 从一个队列搬移到另一个队列
element = q[currentIndex].front();
q[currentIndex].pop();
q[nextIndex].push(element);
}
// 返回最后一个元素
currentIndex = nextIndex;
return element;
}

// 测试程序
int main()
{
myStack<int> s;
for(int i = 0; i < 5; ++i)
{
s.push(i);
}
for(int i = 0; i < 5; ++i)
{
cout << s.top() << endl;
s.pop();
}
cout << "栈当前是否空 " << s.empty() << endl;
s.push(2);
cout << "插入一个元素后,栈当前是否空 " << s.empty() << endl;
s.push(-4);
cout << "插入-4后,栈当前大小 " << s.size() << endl;
cout << "栈顶元素为 " << s.top() << endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: