您的位置:首页 > 其它

科大讯飞2012合肥笔试题

2013-09-30 16:00 309 查看
http://blog.csdn.net/arcsinsin/article/details/11882487#comments

第二部分:填空题(2*6)

1. 操作系统中的存储管理常用(虚拟存储器)的方式来摆脱主存容量的限制。

2. 满二叉树第i层上的叶子节点数有(2的i-1次方)个。

3. 二分查找算法的平均时间复杂度是(logn)。

4. 设x=3,y=2,x<<y=(12)。

5. 非成员函数应声明为类的(友元函数)才能访问这个类的private成员。

6. 带有(纯虚函数)的类称为抽象类,它只能作为基类来使用。

第三部分:简答题(3*6)

1. 列举你所知道的排序算法和他们的平均时间复杂度。

直接插入排序o(n*n)

希尔排序o(nlogn)

冒泡排序o(n*n)

快速排序o(knlogn)

直接选择排序o(n*n)

堆排序o(nlogn)

归并排序o(nlogn)

2. 列举析构函数与普通类成员函数的不同点。

析构函数无返回类型,前面有标志符~,系统自动调用的。

普通成员函数有返回类型,需要显式调用。

3. 在c++语言中使用宏定义经常会引起一下错误(如少打括号引起表达式值与预期不符等),列举一些可以替代宏定义的方法。

const定义常量

inline函数

typedef定义别名

第四部分:编程题

1. 裴波那絜数列的形式如下: 1 1 2 3 5 8 13……. n,编写一个函数计算数列中第n个元素的值。(5分)

int Fibonax(intn)

{

if(n==1 || n==2)

return 1;

else

return Fibonax(n-1)+Fibonax(n-2);

}

2. 不调用任何系统函数,实现在一个字符串中查找子串的函数,如果包含子串,则返回该子串的位置值。(7分)

int GetCommon(char*s1, char *s2, int loca)

{

int len1 = strlen(s1);

int len2 = strlen(s2);



for(int i = 0; i < len1; i++)

{

if(s1[i] == s2[0])

{

int as = i, bs = 0, count = 1;

while(as + 1 < len1 && bs+ 1 < len2 && s1[++as] == s2[++bs])

count++;



if(count == len2)

{

loca = i;

return loca;

}

}

}

}

3. 用算法实现将一个输入的数字颠倒,要求不调用任何系统函数,也不能将输入数字转换为字符串作为中间过渡。(8分)

方法1:(字符数组,借鉴)

#include <stdio.h>

#include <string.h>

#include <dos.h>

int main()

{

charstr[] = "ABCD1234efgh";

intlength = strlen(str);

char* p1 = str;

char* p2 = str + length - 1;

while(p1< p2)

{

char c = *p1;

*p1 = *p2;

*p2 = c;

++p1;

--p2;

}

printf("strnow is %s\n",str);

system("pause");

return0;

}

方法2:递归或栈

void reverse()

{

stack s;

int x;

while (cin>>x)

{

s.push(x);

}

while (!s.empty())

{

x = s.pop();

cout<<x;

}

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: