下了份《
46家公司笔试题
》做做,好久没接触这些基本知识了,熟悉下
1.完成下列程序
*
*.*.
*..*..*..
*...*...*...*...
*....*....*....*....*....
*.....*.....*.....*.....*.....*.....
*......*......*......*......*......*......*......
*.......*.......*.......*.......*.......*.......*.......*.......
#include
<
iostream
>
using
namespace
std;
const
int
ROWS
=
8
;
//
行数
void
DoPrint()
{
int
i,j,k;
for
(i
=
1
;i
<=
ROWS;
++
i)
{
for
(j
=
1
;j
<=
i;
++
j)
{
cout
<<
"
*
"
;
for
(k
=
1
;k
<=
i
-
1
;
++
k)cout
<<
"
.
"
;
}
cout
<<
endl;
}
}
int
main()
{
DoPrint();
return
0
;
}
2.完成程序,实现对数组的降序排序
#include
<
iostream
>
using
namespace
std;
void
printArray(
int
a[],
int
n)
{
for
(
int
i
=
0
;i
<
n;
++
i)
cout
<<
a[i]
<<
"
\t
"
;
cout
<<
endl;
}
int
partion(
int
a[],
int
left,
int
right)
{
//
分割
int
temp
=
a[left];
while
(left
<
right)
{
while
(left
<
right
&&
a[right]
<=
temp)
--
right;
a[left]
=
a[right];
while
(left
<
right
&&
a[left]
>=
temp)
++
left;
a[right]
=
a[left];
}
a[left]
=
temp;
return
left;
}
void
quicksort(
int
a[],
int
left,
int
right)
{
//
快速排序
if
(left
>=
right)
return
;
int
pivotloc;
pivotloc
=
partion(a,left,right);
quicksort(a,left,pivotloc
-
1
);
quicksort(a,pivotloc
+
1
,right);
}
int
main()
{
int
array[]
=
{
45
,
56
,
76
,
234
,
1
,
34
,
23
,
2
,
3
};
int
size
=
sizeof
(array)
/
sizeof
(array[
0
]);
quicksort(array,
0
,size
-
1
);
printArray(array,size);
return
0
;
}
3,费波那其数列,1,1,2,3,5……编写程序求第十项。可以用递归,也可以用其他
方法,但要说明你选择的理由。
#include
<
iostream
>
using
namespace
std;
int
Pheponatch(
int
N)
{
//
返回斐波那契数列第N项
int
a[
100
]
=
{
1
,
1
};
for
(
int
i
=
2
;i
<
N;
++
i)
{
a[i]
=
a[i
-
1
]
+
a[i
-
2
];
}
return
a[N
-
1
];
}
int
main()
{
cout
<<
Pheponatch(
4
)
<<
endl;
return
0
;
}
4,错误原因:指针未初始化,
改正后的代码:
#include
<
stdio.h
>
#include
<
malloc.h
>
#include
<
iostream
>
using
namespace
std;
struct
TNode
{
TNode
*
left;
TNode
*
right;
int
value;
};
TNode
*
root
=
NULL;
void
append(
int
N)
{
TNode
*
NewNode
=
(TNode
*
)malloc(
sizeof
(TNode));
NewNode
->
value
=
N;
NewNode
->
left
=
NULL;
NewNode
->
right
=
NULL;
if
(root
==
NULL)
{
root
=
NewNode;
return
;
}
else
{
TNode
*
temp;
temp
=
root;
while
((N
>=
temp
->
value
&&
temp
->
left
!=
NULL)
||
(N
<
temp
->
value
&&
temp
->
right
!=
NULL))
{
while
(N
>=
temp
->
value
&&
temp
->
left
!=
NULL)
temp
=
temp
->
left;
while
(N
<
temp
->
value
&&
temp
->
right
!=
NULL)
temp
=
temp
->
right;
}
if
(N
>=
temp
->
value)
temp
->
left
=
NewNode;
else
temp
->
right
=
NewNode;
return
;
}
}
void
printTree(TNode
*
t)
{
if
(t
!=
NULL)
{
printf(
"
%d\n
"
,t
->
value);
printTree(t
->
left);
printTree(t
->
right);
}
}
int
main()
{
append(
63
);
append(
45
);
append(
32
);
append(
77
);
append(
96
);
append(
21
);
append(
17
);
//
Again, 数字任意给出
printTree(root);
return
0
;
}
5,设计函数 int atoi(char *s) 。
#include
<
iostream
>
using
namespace
std;
int
my_aoti(
char
*
s)
{
//
字符串转化为整数
int
len
=
strlen(s);
int
result
=
0
;
for
(
int
i
=
0
;i
<
len;
++
i)
{
result
=
result
*
10
+
s[i]
-
'
0
'
;
}
return
result;
}
int
main()
{
char
*
str
=
"
123
"
;
int
num
=
my_aoti(str);
cout
<<
num
<<
endl;
return
0
;
}
6,实现双向链表删除一个节点P,在节点P 后插入一个节点,写出这两个函数
//
双向链表节点
struct
DbLinkNode
{
struct
DbLinkNode
*
prev;
//
前一个节点
struct
DbLinkNode
*
next;
//
后一个节点
int
value;
};
bool
Delete(DbLinkNode
*
head,
int
num)
{
//
在双向链表(带头节点)中删除第一个值为num的节点
if
(head
->
next
!=
NULL)
{
//
表中有节点存在
struct
DbLinkNode
*
pre
=
head,p
=
head
->
next;
while
(p
!=
NULL
&&
p
->
value
!=
num)
{
pre
=
p;
p
=
p
->
next;
}
if
(p
==
NULL)
{
//
没找到
return
false
;
}
else
if
(p
->
next
==
NULL)
{
//
待删除的是最后一个节点
pre
->
next
=
NULL;
delete p;
p
=
NULL;
}
else
{
//
待删除的不是最后一个
pre
->
next
=
p
->
next;
p
->
next
->
prev
=
pre;
delete p;
p
=
NULL;
}
return
true
;
}
else
{
return
false
;
}
}
bool
Insert(
struct
DbLinkNode
*
head,
int
target,
int
num)
{
//
在节点target后插入节点num
if
(head
->
next
!=
NULL)
{
//
表中有节点存在
struct
DbLinkNode
*
p
=
head
->
next;
//
指向第一个节点
struct
DbLinkNode
*
newNode
=
(
struct
DbLinkNode
*
)malloc(
sizeof
(DbLinkNode));
newNode
->
value
=
num;
newNode
->
next
=
NULL;
newNode
->
prev
=
NULL;
while
(p
!=
NULL
&&
p
->
value
!=
num)
{
p
=
p
->
next;
}
if
(p
==
NULL)
{
free(newNode);
newNode
=
NULL;
return
false
;
}
else
if
(p
->
next
==
NULL)
{
//
目标节点是最后一个节点,新节点插入为尾节点
p
->
next
=
newNode;
newNode
->
prev
=
p;
}
else
{
//
目标节点不是最后一个
newNode
->
next
=
p
->
next;
p
->
next
->
prev
=
newNode;
p
->
next
=
newNode;
newNode
->
prev
=
p;
}
return
true
;
}
else
{
return
false
;
}
}