- 相關(guān)推薦
2016年計算機筆試考試題及答案
2016年計算機等級考試就要開(kāi)始了,同學(xué)們復習好了嗎?下面yjbys小編為大家準備的是關(guān)于網(wǎng)絡(luò )筆試的考試題及答案,希望能幫助大家順利通過(guò)考試!
【字符串】
1、輸入一個(gè)字符串,打印出該字符串中字符的所有排列。
例如輸入字符串a(chǎn)bc,則輸出由字符a、b、c所能排列出來(lái)的所有字符串a(chǎn)bc、acb、bac、bca、cab和cba。
2、有一個(gè)由大小寫(xiě)組成的字符串,現在需要對他進(jìn)行修改,將其中的所有小寫(xiě)字母排在大寫(xiě)字母的前面
(大寫(xiě)或小寫(xiě)字母之間不要求保持原來(lái)次序),如有可能盡量選擇時(shí)間和空間效率高的算法。
c語(yǔ)言函數原型void proc(char *str),也可以采用你自己熟悉的語(yǔ)言。
3、編寫(xiě)反轉字符串的程序,要求優(yōu)化速度、優(yōu)化空間。
4、用C語(yǔ)言實(shí)現函數void * memmove(void *dest, const void *src, size_t n)。
memmove函數的功能是拷貝src所指的內存內容前n個(gè)字節到dest所指的地址上。
分析:由于可以把任何類(lèi)型的指針賦給void類(lèi)型的指針,這個(gè)函數主要是實(shí)現各種數據類(lèi)型的拷貝。
5、編程找出兩個(gè)字符串中最大公共子字符串,如"abccade", "dgcadde"的最大子串為"cad"。
6、輸入一個(gè)字符串,輸出該字符串中對稱(chēng)的子字符串的最大長(cháng)度。
比如輸入字符串"google",由于該字符串里最長(cháng)的對稱(chēng)子字符串是"goog",因此輸出4。
7、字符串原地壓縮。題目描述:“eeeeeaaaff" 壓縮為 "e5a3f2",請編程實(shí)現。
8、請以回溯與不回溯算法實(shí)現字符串匹配。
9、輸入一個(gè)英文句子,翻轉句子中單詞的順序,但單詞內字符的順序不變。句子中單詞以空格符隔開(kāi)。
為簡(jiǎn)單起見(jiàn),標點(diǎn)符號和普通字母一樣處理。
例如:輸入"I am a student.",則輸出"student. a am I"。
10、在一個(gè)字符串中找到第一個(gè)只出現一次的字符。如輸入abaccdeff,則輸出b。
11、寫(xiě)一個(gè)函數,它的原形是int continumax(char *outputstr,char *intputstr)
功能:
在字符串中找出連續最長(cháng)的數字串,并把這個(gè)串的長(cháng)度返回,并把這個(gè)最長(cháng)數字串付給其中一個(gè)函數參數outputstr所指內存。
例如:"abcd12345ed125ss123456789"的首地址傳給intputstr后,函數將返回9,outputstr所指的值為123456789。
12、定義字符串的左旋轉操作:把字符串前面的若干個(gè)字符移動(dòng)到字符串的尾部。
如:把字符串a(chǎn)bcdef左旋轉2位得到字符串cdefab。請實(shí)現字符串左旋轉的函數。
要求時(shí)間對長(cháng)度為n的字符串操作的復雜度為O(n),輔助內存為O(1)。
13、有n個(gè)長(cháng)為m+1的字符串,如果某個(gè)字符串的最后m個(gè)字符與某個(gè)字符串的前m個(gè)字符匹配,則兩個(gè)字符串可以聯(lián)接。
問(wèn)這n個(gè)字符串最多可以連成一個(gè)多長(cháng)的字符串,如果出現循環(huán),則返回錯誤。
14、如果字符串一的所有字符按其在字符串中的順序出現在另外一個(gè)字符串二中,則字符串一稱(chēng)之為字符串二的子串。
注意,并不要求子串(字符串一)的字符必須連續出現在字符串二中。
請編寫(xiě)一個(gè)函數,輸入兩個(gè)字符串,求它們的最長(cháng)公共子串,并打印出最長(cháng)公共子串。
例如:輸入兩個(gè)字符串BDCABA和ABCBDAB,字符串BCBA和BDAB都是是它們的最長(cháng)公共子串,
則輸出它們的長(cháng)度4,并打印任意一個(gè)子串。
分析:求最長(cháng)公共子串(Longest Common Subsequence, LCS)是一道非常經(jīng)典的動(dòng)態(tài)規劃題。
15、輸入兩個(gè)字符串,從第一字符串中刪除第二個(gè)字符串中所有的字符。
例如,輸入"They are students."和"aeiou",則刪除之后的第一個(gè)字符串變成"Thy r stdnts."。
16、一個(gè)文件,內含一千萬(wàn)行字符串,每個(gè)字符串在1K以?xún),要求找出所有相反的串對,如abc和cba。
17、給出一個(gè)函數來(lái)復制兩個(gè)字符串A和B。字符串A的后幾個(gè)字節和字符串B的前幾個(gè)字節重疊。
18、已知一個(gè)字符串,比如asderwsde,尋找其中的一個(gè)子字符串比如sde的個(gè)數,如果沒(méi)有返回0,有的話(huà)返回子字符串的個(gè)數。
19、求最大連續遞增數字串(如"ads3sl456789DF3456ld345AA"中的"456789")。
20、實(shí)現strstr功能,即在父串中尋找子串首次出現的位置。
21、編碼完成下面的處理函數。
函數將字符串中的字符'*'移到串的前部分,前面的非'*'字符后移,但不能改變非'*'字符的先后順序,函數返回串中字符'*'的數量。
如原始串為:ab**cd**e*12,處理后為*****abcde12,函數并返回值為5。(要求使用盡量少的時(shí)間和輔助空間)
22、刪除字符串中的數字并壓縮字符串。如字符串”abc123de4fg56”處理后變?yōu)?rdquo;abcdefg”。注意空間和效率。
23、求兩個(gè)串中的第一個(gè)最長(cháng)子串(神州數碼以前試題)。如"abractyeyt","dgdsaeactyey"的最大子串為"actyet"。
【棧、鏈表、樹(shù)、圖】
1、編寫(xiě)一個(gè)程序,把一個(gè)有序整數數組放到二叉樹(shù)中。
2、編程實(shí)現從頂部開(kāi)始逐層打印二叉樹(shù)節點(diǎn)數據。[參考]
3、編程實(shí)現單鏈表逆轉。
4、設計一個(gè)算法,找出二叉樹(shù)上任意兩個(gè)結點(diǎn)的最近共同父結點(diǎn)。復雜度不能為O(n2)。
5、二叉排序樹(shù)中,令f = (最大值+最小值) / 2,設計一個(gè)算法,找出距離f值最近、大于f值的結點(diǎn)。復雜度不能為O(n2)。
6、有雙向循環(huán)鏈表結點(diǎn)定義為:
struct node
{
int data;
struct node *front,*next;
};
有兩個(gè)雙向循環(huán)鏈表A,B,知道其頭指針為:pHeadA、pHeadB,請寫(xiě)一函數將兩鏈表中data值相同的結點(diǎn)刪除。
更多相關(guān)文章推薦閱讀:
3.2016年計算機網(wǎng)絡(luò )技術(shù)面試題及答案
7、輸入一個(gè)鏈表的頭結點(diǎn),從尾到頭反過(guò)來(lái)輸出每個(gè)結點(diǎn)的值。鏈表結點(diǎn)定義如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
8、輸入一棵二元查找樹(shù),將該二元查找樹(shù)轉換成一個(gè)排序的雙向鏈表。
要求不能創(chuàng )建任何新的結點(diǎn),只調整指針的指向。
10
/ \
6 14
/ \ / \
4 8 12 16
轉換成雙向鏈表
4=6=8=10=12=14=16。
首先我們定義的二元查找樹(shù) 節點(diǎn)的數據結構如下:
struct BSTreeNode
{
int m_nValue; // value of node
BSTreeNode *m_pLeft; // left child of node
BSTreeNode *m_pRight; // right child of node
}; [參考]
9、設計包含min函數的棧。
定義棧的數據結構,要求添加一個(gè)min函數,能夠得到棧的最小元素。
要求函數min、push以及pop的時(shí)間復雜度都是O(1)。
10、輸入一個(gè)整數和一棵二元樹(shù)。從樹(shù)的根結點(diǎn)開(kāi)始往下訪(fǎng)問(wèn)一直到葉結點(diǎn)所經(jīng)過(guò)的所有結點(diǎn)形成一條路徑。
打印出和與輸入整數相等的所有路徑。
例如 輸入整數22和如下二元樹(shù)
10
/ \
5 12
/ \
4 7
則打印出兩條路徑:10, 12和10, 5, 7。
二元樹(shù)節點(diǎn)的數據結構定義為:
struct BinaryTreeNode // a node in the binary tree
{
int m_nValue; // value of node
BinaryTreeNode *m_pLeft; // left child of node
BinaryTreeNode *m_pRight; // right child of node
};
11、給出倆個(gè)單向鏈表的頭指針,比如h1,h2,判斷這倆個(gè)鏈表是否相交。為了簡(jiǎn)化問(wèn)題,我們假設倆個(gè)鏈表均不帶環(huán)。
問(wèn)題擴展:
(1) 如果鏈表可能有環(huán)列?
(2) 如果需要求出倆個(gè)鏈表相交的第一個(gè)節點(diǎn)列?
12、輸入一個(gè)整數數組,判斷該數組是不是某二元查找樹(shù)的后序遍歷的結果。
如果是返回true,否則返回false。
例如輸入5、7、6、9、11、10、8,由于這一整數序列是如下樹(shù)的后序遍歷結果:
8
/ \
6 10
/ \ / \
5 7 9 11
因此返回true。
如果輸入7、4、6、5,沒(méi)有哪棵樹(shù)的后序遍歷的結果是這個(gè)序列,因此返回false。
13、如果我們把二叉樹(shù)看成一個(gè)圖,父子節點(diǎn)之間的連線(xiàn)看成是雙向的,我們姑且定義"距離"為兩節點(diǎn)之間邊的個(gè)數。
寫(xiě)一個(gè)程序,求一棵二叉樹(shù)中相距最遠的兩個(gè)節點(diǎn)之間的距離。
14、輸入一個(gè)單向鏈表,輸出該鏈表中倒數第k個(gè)結點(diǎn)。鏈表的倒數第0個(gè)結點(diǎn)為鏈表的尾指針。
鏈表結點(diǎn)定義如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
15、輸入一顆二元查找樹(shù),將該樹(shù)轉換為它的鏡像,即在轉換后的二元查找樹(shù)中,左子樹(shù)的結點(diǎn)都大于右子樹(shù)的結點(diǎn)。
用遞歸和循環(huán)兩種方法完成樹(shù)的鏡像轉換。
例如輸入:
8
/ \
6 10
/\ /\
5 7 9 11
輸出:
8
/ \
10 6
/ \/ \
11 97 5
定義二元查找樹(shù)的結點(diǎn)為:
struct BSTreeNode
{
int m_nValue; // value of node
BSTreeNode *m_pLeft; // left child of node
BSTreeNode *m_pRight; // right child of node
}; [參考]
16、求一個(gè)二叉樹(shù)中任意兩個(gè)節點(diǎn)間的最大距離,兩個(gè)節點(diǎn)的距離的定義是 這兩個(gè)節點(diǎn)間邊的個(gè)數。
比如某個(gè)孩子節點(diǎn)和父節點(diǎn)間的距離是1,和相鄰兄弟節點(diǎn)間的距離是2,優(yōu)化時(shí)間空間復雜度。
17、求一個(gè)有向連通圖的割點(diǎn),割點(diǎn)的定義是,如果除去此節點(diǎn)和與其相關(guān)的邊,有向圖不再連通,描述算法。
18、設計一個(gè)棧結構,滿(mǎn)足一下條件:min,push,pop操作的時(shí)間復雜度為O(1)。
19、請修改append函數,利用這個(gè)函數實(shí)現:
兩個(gè)非降序鏈表的并集,1->2->3 和 2->3->5 并為 1->2->3->5
另外只能輸出結果,不能修改兩個(gè)鏈表的數據。
20、遞歸和非遞歸倆種方法實(shí)現二叉樹(shù)的前序遍歷。
21、輸入一棵二元樹(shù)的根結點(diǎn),求該樹(shù)的深度。
從根結點(diǎn)到葉結點(diǎn)依次經(jīng)過(guò)的結點(diǎn)(含根、葉結點(diǎn))形成樹(shù)的一條路徑,最長(cháng)路徑的長(cháng)度為樹(shù)的深度。
22、用倆個(gè)棧實(shí)現隊列,某隊列的聲明如下:
template class CQueue
{
public:
CQueue() {}
~CQueue() {}
void appendTail(const T& node); // append a element to tail
void deleteHead(); // remove a element from head
private:
T m_stack1;
T m_stack2;
};
23、給定鏈表的頭指針和一個(gè)結點(diǎn)指針,在O(1)時(shí)間刪除該結點(diǎn)。鏈表結點(diǎn)的定義如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
函數的聲明如下:void DeleteNode(ListNode* pListHead, ListNode* pToBeDeleted);
24、兩個(gè)單向鏈表,找出它們的第一個(gè)公共結點(diǎn)。
更多相關(guān)文章推薦閱讀:
3.2016年計算機網(wǎng)絡(luò )技術(shù)面試題及答案
鏈表的結點(diǎn)定義為:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
25、用遞歸顛倒一個(gè)棧。例如輸入棧{1, 2, 3, 4, 5},1在棧頂。顛倒之后的棧為{5, 4, 3, 2, 1},5處在棧頂。
26、二叉樹(shù)的結點(diǎn)定義如下:
struct TreeNode
{
int m_nvalue;
TreeNode* m_pLeft;
TreeNode* m_pRight;
};
輸入二叉樹(shù)中的兩個(gè)結點(diǎn),輸出這兩個(gè)結點(diǎn)在數中最低的共同父結點(diǎn)。
27、有一個(gè)復雜鏈表,其結點(diǎn)除了有一個(gè)m_pNext指針指向下一個(gè)結點(diǎn)外,還有一個(gè)m_pSibling指向鏈表中的任一結點(diǎn)或者NULL。
其結點(diǎn)的C++定義如下:
struct ComplexNode
{
int m_nValue;
ComplexNode* m_pNext;
ComplexNode* m_pSibling;
};
下圖是一個(gè)含有5個(gè)結點(diǎn)的該類(lèi)型復雜鏈表。
圖中實(shí)線(xiàn)箭頭表示m_pNext指針,虛線(xiàn)箭頭表示m_pSibling指針。為簡(jiǎn)單起見(jiàn),指向NULL的指針沒(méi)有畫(huà)出。
請完成函數ComplexNode* Clone(ComplexNode* pHead),以復制一個(gè)復雜鏈表。
28、給定單鏈表、檢測是否有環(huán)。
29、給定兩個(gè)單鏈表(head1, head2),檢測兩個(gè)鏈表是否有交點(diǎn),如果有返回第一個(gè)交點(diǎn)。
30、給定單鏈表(head),如果有環(huán)的話(huà)請返回從頭結點(diǎn)進(jìn)入環(huán)的第一個(gè)節點(diǎn)。
31、只給定單鏈表中某個(gè)結點(diǎn)p(并非最后一個(gè)結點(diǎn),即p->next!=NULL)指針,刪除該結點(diǎn)。
32、只給定單鏈表中某個(gè)結點(diǎn)p(非空結點(diǎn)),在p前面插入一個(gè)結點(diǎn)。
33、編寫(xiě)實(shí)現鏈表排序的一種算法。說(shuō)明為什么你會(huì )選擇用這樣的方法?
34、編寫(xiě)實(shí)現數組排序的一種算法。說(shuō)明為什么你會(huì )選擇用這樣的方法?
35、怎樣編寫(xiě)一個(gè)程序,把一個(gè)有序整數數組放到二叉樹(shù)中?
更多相關(guān)文章推薦閱讀:
3.2016年計算機網(wǎng)絡(luò )技術(shù)面試題及答案
【計算機筆試考試題及答案】相關(guān)文章:
臨床執業(yè)醫師綜合筆試考試題及答案10-29
大學(xué)計算機基礎考試題及答案09-20
計算機基礎考試題庫及答案06-20
2017計算機考試題目及答案01-19
計算機考試題庫及答案01-13
計算機一級excel考試題及答案12-05
職稱(chēng)計算機考試題庫及答案07-12
2017年計算機統考試題及答案10-11