趋势科技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中可以直接运行的。
用两个队列实现栈
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; }
相关文章推荐
- 趋势科技2011校招笔试题+答案解析
- 阿里巴巴2016校招笔试题(含答案、解析)
- 腾讯2011年10月15日校招笔试+答案解析
- 阿里巴巴2011笔试题+答案解析
- 腾讯2011年10月15日校招笔试+答案解析
- 腾讯2011年10月15日校招笔试+答案解析
- 百度2011招聘笔试题+答案解析
- 阿里巴巴2011笔试题+答案解析
- 阿里巴巴2011笔试题+答案解析
- 阿里巴巴2011笔试题+答案解析
- 盛大游戏2011.10.22校招笔试题+答案解析
- 百度2011招聘笔试题+答案解析
- 搜狗2011笔试题+答案解析
- 腾讯2011年10月15日校招笔试+答案解析
- 腾讯2011年10月15日校招笔试+答案解析
- 中兴2011笔试题+答案解析
- 百度2011招聘笔试题+答案解析
- 网易游戏2011招聘笔试题+答案解析
- 网易游戏2011招聘笔试题+答案解析
- 网易游戏2011招聘笔试题+答案解析