广东北电笔试题目:
1.两篇翻译,中译英,英译中。(10分)
2.编程题。(40分)
有一个整型数组,要求从中找出一个和最大的连续子集,输出最大的和。
如数组:(-2,11,-4,13,-5,-2)
MaxSum = 20 (11 + (-4) + 13 = 20)
数组:(7,8,-16,2,4,-2,15,-14,3,-7,-1,2)
MaxSum = 19 (2 + 4 + (-2) + 15 = 19)
数组:(-5,-2,-8)
MaxSum = -2
请用C/C++或Pascal写出一个函数:MaxSumOutput(),并计算其算法复杂度。
3.程序填空。(25分)
反转一个链表,如下图所示:
完成下面的程序:
struct node{
void *data;
struct node *next;
};
void ReverseLink(struct node* &head)
{
struct node * prev, *p,*succ;
prev = NULL;
p = head;
while(p != NULL)
{
1
2
3
4
}
5
}
4.改正下面程序中的错误。(25分)
在下面的程序中,没有任何语法错误,而只有3出逻辑错误,请找出并改正。
该程序实现了输出一个矩阵:
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
void PrintMatrix(int * maxtrix,int size)
{
/*在屏幕上打印输出矩阵*/
}
void FillMatrix(int *matrix,int size)
{
int upperBound,lowerBound;
int index1 = 0,index2 = 0;
int direction = 1;
int number = 1;
bool dimensionFlag = false;
upperBound = size;
lowerBound = 0;
while(upperBound >= lowerBound)
{
for(int i = 0;i < 4;i++)
{
for(int j = lowerBound;j < upperBound;j++)
{
matrix[index1 * size + index2 - 1] = number;
number++;
if(j >= upperBound)
{
dimensionFlag = !dimensionFlag;
if(i % 2 == 1)
{
direction = (direction + 1) % 4;
}
}
if(dimensionFlag)
{
index1 += direction;
}
else
{
index2 += direction;
}
}
if(i % 2 == 0)
{
if(i % 4 == 0)
{
lowerBound++;
}
else
{
upperBound--;
}
}
}
}
return;
}
void main()
{
int Max_Size = 5;
int * matrix = new malloc(sizeof(int *) * Max Size * Max_Size);
FillMatrix(matrix,Max_Size);
PrintMatrix(matrix,Max_Size);
return;
}